Solrを使ってみる、その2

Solrを使ってみる、その1の続きである。前回でSolrが動作することはわかった。これはいわば、GUI付のデータベースシステムのようなイメージだ。

データベースシステムであるから、当然だが手作業ではなく、クライアントであるアプリからデータの登録とその検索ができるはずだ。これをJavaプログラムから行ってみる。

Solr上にデータベースを作る

あらかじめSolr上にデータベースを作成しておく。ちなみにこの操作はSolrが動作していなくても可能のようだ。

solr create -c bigboxstore

クライアントライブラリを入れる

gradleに以下の依存を追加する。

dependencies {
  compile group: 'org.apache.solr', name: 'solr-solrj', version: '8.1.1'
}

データを投入する

データを投入してみる。

package solrtest;

import org.apache.solr.client.solrj.impl.*;
import org.apache.solr.common.*;

public class Main {

  public static void main(String[]args) throws Exception {
    register();
  }

  static void register() throws Exception {
    String urlString = "http://localhost:8983/solr/bigboxstore";
    HttpSolrClient solr = new HttpSolrClient.Builder(urlString).build();
    solr.setParser(new XMLResponseParser());

    SolrInputDocument document = new SolrInputDocument();
    document.addField("id", "123456");
    document.addField("name", "Kenmore Dishwasher");
    document.addField("price", "599.99");
    solr.add(document);
    solr.commit();
  }
}

この時点で管理画面での検索を行うと、たしかにデータが入っている。

検索する

次に検索してみる。

  public static void main(String[]args) throws Exception {
    search();
  }

  static void search() throws Exception {
    String urlString = "http://localhost:8983/solr/bigboxstore";
    HttpSolrClient solr = new HttpSolrClient.Builder(urlString).build();
    solr.setParser(new XMLResponseParser());

    SolrQuery query = new SolrQuery();
    query.set("q", "price:599.99");
    QueryResponse response = solr.query(query);

    SolrDocumentList docList = response.getResults();
    System.out.println("found " + docList.getNumFound());

    for (SolrDocument doc : docList) {
      System.out.println("id " + doc.getFieldValue("id"));
      System.out.println("price " + doc.getFieldValue("price"));
    }
  }

たしかに見つかった。

found 1
id 123456
price 599.99

参考

以下を全面的に参考にさせていただいた。

他の参考としては以下がある。