1。概要
Apache Solrは、Lucene上に構築されたオープンソースの検索プラットフォームです。Apache SolrJは、Solr用のJavaベースのクライアントであり、ドキュメントの索引付け、クエリ、削除などの検索の主な機能のためのインターフェースを提供します。
この記事では、SolrJを使用してApacheSolrサーバーと対話する方法について説明します。
2.セットアップ
マシンにSolrサーバーをインストールするには、Solrクイックスタートガイドを参照してください。
インストールプロセスは簡単です。zip/ tarパッケージをダウンロードし、コンテンツを抽出して、コマンドラインからサーバーを起動するだけです。この記事では、「bigboxstore」というコアを持つSolrサーバーを作成します。
bin/solr start bin/solr create -c 'bigboxstore'
デフォルトでは、Solrは着信HTTPクエリをポート8983でリッスンします。ブラウザで// localhost:8983 / solr /#/ bigboxstore URLを開き、Solrダッシュボードを確認することで、正常に起動されたことを確認できます。
3.Maven構成
Solrサーバーが稼働しているので、SolrJJavaクライアントに直接ジャンプしましょう。プロジェクトでSolrJを使用するには、pom.xmlファイルで次のMaven依存関係を宣言する必要があります。
org.apache.solr solr-solrj 6.4.0
MavenCentralがホストする最新バージョンをいつでも見つけることができます。
4. Apache SolrJ Java API
Solrサーバーに接続してSolrJクライアントを起動しましょう。
String urlString = "//localhost:8983/solr/bigboxstore"; HttpSolrClient solr = new HttpSolrClient.Builder(urlString).build(); solr.setParser(new XMLResponseParser());
注:SolrJは、デフォルトの応答形式としてXMLではなくバイナリ形式を使用します。Solrとの互換性のために、上記のようにXMLに対してsetParser()を明示的に呼び出す必要があります。詳細については、こちらをご覧ください。
4.1。ドキュメントのインデックス作成
SolrInputDocumentを使用してインデックスを作成するデータを定義し、add()メソッドを使用してインデックスに追加しましょう。
SolrInputDocument document = new SolrInputDocument(); document.addField("id", "123456"); document.addField("name", "Kenmore Dishwasher"); document.addField("price", "599.99"); solr.add(document); solr.commit();
注:Solrデータベースを変更するアクションでは、アクションの後にcommit()を実行する必要があります。
4.2。Beansによるインデックス作成
Beanを使用してSolrドキュメントにインデックスを付けることもできます。プロパティに@フィールドアノテーションが付けられたProductBeanを定義しましょう:
public class ProductBean { String id; String name; String price; @Field("id") protected void setId(String id) { this.id = id; } @Field("name") protected void setName(String name) { this.name = name; } @Field("price") protected void setPrice(String price) { this.price = price; } // getters and constructor omitted for space }
次に、Beanをインデックスに追加しましょう。
solrClient.addBean( new ProductBean("888", "Apple iPhone 6s", "299.99") ); solrClient.commit();
4.3。フィールドとIDによるインデックス付きドキュメントのクエリ
SolrQueryを使用してSolrサーバーにクエリを実行し、ドキュメントが追加されていることを確認しましょう。
サーバーからのQueryResponseには、field:valueの形式のクエリに一致するSolrDocumentオブジェクトのリストが含まれます。この例では、価格でクエリを実行します。
SolrQuery query = new SolrQuery(); query.set("q", "price:599.99"); QueryResponse response = solr.query(query); SolrDocumentList docList = response.getResults(); assertEquals(docList.getNumFound(), 1); for (SolrDocument doc : docList) { assertEquals((String) doc.getFieldValue("id"), "123456"); assertEquals((Double) doc.getFieldValue("price"), (Double) 599.99); }
より簡単なオプションは、getById()を使用してIDでクエリを実行することです。一致するものが見つかった場合、1つのドキュメントのみが返されます。
SolrDocument doc = solr.getById("123456"); assertEquals((String) doc.getFieldValue("name"), "Kenmore Dishwasher"); assertEquals((Double) doc.getFieldValue("price"), (Double) 599.99);
4.4。ドキュメントの削除
インデックスからドキュメントを削除する場合は、deleteById()を使用して、ドキュメントが削除されたことを確認できます。
solr.deleteById("123456"); solr.commit(); SolrQuery query = new SolrQuery(); query.set("q", "id:123456"); QueryResponse response = solr.query(query); SolrDocumentList docList = response.getResults(); assertEquals(docList.getNumFound(), 0);
deleteByQuery()のオプションもあるので、特定の名前のドキュメントを削除してみましょう。
solr.deleteByQuery("name:Kenmore Dishwasher"); solr.commit(); SolrQuery query = new SolrQuery(); query.set("q", "id:123456"); QueryResponse response = solr.query(query); SolrDocumentList docList = response.getResults(); assertEquals(docList.getNumFound(), 0);
5。結論
この簡単な記事では、SolrJ Java APIを使用して、ApacheSolr全文検索エンジンとの一般的な対話のいくつかを実行する方法を説明しました。
この記事で提供されている例は、GitHubで確認できます。