solrjsolrjを使い始める


備考

このセクションでは、solrjの概要と、なぜ開発者がそれを使いたいのかを概説します。

また、solrj内の大きなテーマについても言及し、関連するトピックにリンクする必要があります。 solrjのドキュメントは新しくなっているので、それらの関連トピックの初期バージョンを作成する必要があるかもしれません。

SolrJを使用してSolrにドキュメントを追加する

次のようなスキーマがあるとします。

<field name="id" type="string" indexed="true" stored="true" required="true" /> 

<field name="name" type="string" indexed="true" stored="true" />
 

Solrにコンテンツを追加するsolrjコードは次のようになります:

 package com.stackoverflow.solrj.example;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;

import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.common.SolrInputDocument;

public class SolrJIndexing {

    private final static String SOLR_URL = "http://localhost:8983/solr/mycollection";

    public static void main(String[] args) {
        SolrClient solrClient = new HttpSolrClient.Builder(SOLR_URL).build();
        SolrInputDocument document1 = getDocument(1, "Document example 1");
        SolrInputDocument document2 = getDocument(2, "Document example 2");
        Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
        docs.add(document1);
        docs.add(document2);
        try {
            solrClient.add(docs);
            solrClient.commit();
        } catch (SolrServerException | IOException e) {
            e.printStackTrace();
        }
    }

    private static SolrInputDocument getDocument(int id, String name) {
        SolrInputDocument document = new SolrInputDocument();
        document.addField("id", id);
        document.addField("name", name);
        return document;
    }

}
 

ローカルSTANDALONEクラスタのInit SolrJクライアントv Kerberosを使用したリモートCLOUD

構成プロパティに基づいてSolrJクライアントを初期化する便利な方法。

private void initSolrClient() {
    if (conf.kerberos().isEnabled()) {
        System.setProperty("java.security.auth.login.config", conf.kerberos().confPath());
        HttpClientUtil.addConfigurer(new Krb5HttpClientConfigurer());
    }
    if (conf.solr().getMode() == SolrProperties.Mode.STANDALONE) {
        this.solr = new HttpSolrClient.Builder(conf.solr().url()).build();
    }
    if (conf.solr().getMode() == SolrProperties.Mode.CLOUD) {
        this.solr = new CloudSolrClient.Builder().withZkHost(conf.solr().zookeepers()).build();
    }
}
 

REMOTE with Kerberos:

solr.conf.mode=CLOUD
solr.conf.zookepers=zookeeper-01.mydomain.com:2181,zookeeper-02.mydomain.com:2181,zookeeper-03.mydomain.com:2181/solr
kerberos.enabled=true
kerberos.confPath=/my/path/to/krb5/jaas-client.conf
 

ローカル開発:

solr.conf.mode=STANDALONE
solr.conf.url=http://localhost:8983/solr
kerberos.enabled=false
 

インストールまたはセットアップ

SolrJはSolr 1.x以降、Solrディストリビューションの一部として提供されています。最新のSolrバージョンはこちらからダウンロードできます 。利用できる最新のバージョンであるSolr-6.3.0から、以下のライブラリを入手してビルドパスに追加する必要があります:/ dist / apache-solr-solrj- .jar / dist / solrj-lib /

完了したら、SolrJはSolrインスタンスと通信する準備が整いました。次の例では、SolrJを使用してコンテンツを照会または追加する方法を説明します。

SolrJによるSolrクエリ

前の例を使用してSolrに文書を正常に追加した場合は、次のようにして取得できます。

package com.stackoverflow.solrj.example;

import java.io.IOException;
import java.util.Iterator;

import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;

public class SolrJQueryExample {

    private final static String SOLR_URL = "http://localhost:8983/solr/mycollection";

    public static void main(String[] args) throws SolrServerException, IOException {

        SolrClient solrClient = new HttpSolrClient.Builder(SOLR_URL).build();
        SolrQuery solrQuery = new SolrQuery();
        solrQuery.setQuery("example");
        solrQuery.setStart(0);
        solrQuery.setRows(10);

        QueryResponse queryResponse = solrClient.query(solrQuery);
        SolrDocumentList solrDocs = queryResponse.getResults();
        Iterator<SolrDocument> iterator = solrDocs.iterator();
        while (iterator.hasNext()) {
            SolrDocument solrDocument = iterator.next();
            String docId = (String) solrDocument.getFieldValue("id");
            String docName = (String) solrDocument.getFieldValue("name");
            System.out.println("Document " + docId + ": " + docName);
        }

    }
}