トップ ITインフラ OSとミドルウェア Solr

Apache Solr(ソーラ)の入門知識、全文検索の構築、solrjの使い方など

Apache Solrとは、読み方はソーラ、フリー最高峰ともいえる全文検索システム構築用のソフトウェアです。Excel、Word、PDFも全文検索できます。本記事に全文検索の構築、solrjの使い方などApache Solrの入門知識をまとめました。

▲記事トップへ

目次

この記事の目次です。

1. Solrの概要―Apache Solr(ソーラ)とは何か

2. Solr構築の入門知識―インストール、マルチコアなど

3. solrjの入門知識―Solrのドキュメント登録、検索の解説とJavaのサンプルコード

更新履歴

1. 概要―Apache Solr(ソーラ)とは

Apache Solr(ソーラ)は、 全文検索エンジンライブラリLuceneをベースに、管理画面やキャッシュ機構を取り入れたオープンソースの全文検索システムです。 POIなどApacheのライブラリがたくさん組み込まれており、Excel、Word、PDFも全文検索できます。 まさに、フリー最高峰と言えるフリーの検索ソフトです。

補足

Lucene(ルシーン)は、Apacheソフトウェア財団のLuceneプロジェクトで開発されている全文検索用のJavaのクラスライブラリです。 Solr(ソーラ)は、Luceneプロジェクトのサブプロジェクトとして開発されています。

Solrの構築方法

Solrの構築方法の概要について見ていきます。詳細は「2. Solr構築の入門知識―インストール、マルチコアなど」で見ていきます。

Solrをインストールする方法

たとえば、Tomcatの<Tomcatホーム>\webapps\solrにweb表示するものを置いて、それ以外のファイルは、別にsolrのホームディレクトリを作るイメージでインストールできます。

コア(SolrCore)を増やす方法

一つの Solr でコア(インデックス格納先)を複数作成する方法をマルチコアといいます。 solrホームにsolrの設定ファイルを配置し、solrの管理画面よりコアを登録する操作で行えます。

Solrの設定ファイル

Solrの設定ファイルには以下のようなものがあります。

  1. schema.xml…インデックスの構成を設定します。
  2. solrconfig.xml…キャッシュサイズや分散設定、利用するサブコンポーネントなどを設定します。

Solrのドキュメント登録、検索

solrjなどのライブラリを使用してWebアプリケーションやバッチ処理などでドキュメントの登録や検索が行えます。 Excel、Word、PDFもあつかうことができます。 solrjの詳細については「3. solrjの入門知識―Solrのドキュメント登録、検索の解説とJavaのサンプルコード」で見ていきます。

2. Solr構築の入門知識―インストール、マルチコアなど

インストール、マルチコアなど、Solr構築の入門知識について見ていきます。

Solrをインストールする方法

たとえば、Tomcatの<Tomcatホーム>\webapps\solrにweb表示するものを置いて、それ以外のファイルは、別にsolrのホームディレクトリを作るイメージでインストールできます。

solrをインストールする方法―Windowsにサンプルを動かす環境を構築

Windows上のTomcatにsolrを配置して、solrの管理画面を表示させるところまでを紹介しています。

solrの物件を入手

http://www.apache.org/dyn/closer.cgi/lucene/solr/4.1.0より、solr-4.1.0.zipをダウンロードし、解凍します。

solrの管理ツールを配置

<Tomcatホーム>\webapps\solrにはweb表示するものを置いて、それ以外のファイルは、別にsolrのホームディレクトリを作ることにします。

ここでは、先に<Tomcatホーム>\webapps\solrを配置&設定します。

Tomcatに管理ツールのwarファイルを配置

停止状態のTomcatの<Tomcatホーム>\webappsに解凍したzip内の以下(warファイル)をコピーします。

<solr-4.1.0.zip解凍先>\example\webapps\solr.war

<Tomcatホーム>\conf\server.xmlに、コンテキストの設定を追加します。

<?xml version='1.0' encoding='utf-8'?>
 <Server …>
   <Service …>
     <Engine …>
       <Host …>

         <Context path="solr"
                  reloadable="true" />

       </Host>
     </Engine>
   </Service>
 </Server>

参考)Tomcatの<Tomcatホーム>\webappsの下にwarファイルを配置しない場合は Contextタグに以下の属性を設定する必要があります。

docBase="<warファイル展開先パス>"
コピーした管理ツールのwarファイルを展開

Tomcatを一回起動してコピーしたwarを解凍します。 <Tomcatホーム>\webapps\solr\ができたことを確認します。 解凍したらTomcatを停止します。

web.xmlの編集

<Tomcatホーム>\webapps\solr\WEB-INF\web.xmlを編集して、この後に構築するsolrのホームディレクトリのパスを設定します。

以下のコメントアウトを解除して、env-entry-valueに<solrのホームディレクトリ>のパスを記述します。

<!-- ←コメントを解除する
    <env-entry>
       <env-entry-name>solr/home</env-entry-name>
       <env-entry-value><solrのホームディレクトリ></env-entry-value>
       <env-entry-type>java.lang.String</env-entry-type>
    </env-entry>
  --> ←コメントを解除する
solrホームの構築

上でも書きましたが、<Tomcatホーム>\webapps\solrにはweb表示するものを置いて、それ以外のファイルは、別にsolrのホームディレクトリを作ることにしています。

mkdir <solrのホームディレクトリ>
solrホームにsolrの設定ファイルを配置

<solr-4.1.0.zip解凍先>\example\solr\collection1を<solrのホームディレクトリ>にコピーします。

dataディレクトリ設定

<solrのホームディレクトリ>\collection1配下にデータディレクトリ作成します。

mkdir <solrのホームディレクトリ>\collection1\data

<solrのホームディレクトリ>\collection1\conf\solrconfig.xmlを編集します。

<dataDir>${solr.data.dir:}</dataDir>

上記の記述の${solr.data.dir:}を作成したデータディレクトリのパスに修正します。

<dataDir><solrのホームディレクトリ>\collection1\data</dataDir>
solrの管理画面の表示確認

Tomcatを起動し、以下にアクセスして管理画面が表示されればOKです。

http://localhost:8080/solr/

solrの管理画面

コア(SolrCore)を増やす方法

一つの Solr でコア(インデックス格納先)を複数作成する方法をマルチコアといいます。 solrホームにsolrの設定ファイルを配置し、solrの管理画面よりコアを登録する操作で行えます。

コア(SolrCore)を増やす方法―サンプルのコア(collection1)を複製

Solrでコア(SolrCore)を増やす方法(サンプルのコア(collection1)を複製)を紹介しています。

先ほど、WindowsにSolrをインストールする方法で作成したcollection1を複製してcollection2を構築する方法を紹介しています。

solrホームにsolrの設定ファイルを配置

<solr-4.1.0.zip解凍先>\example\solr\collection1のコピーを<solrのホームディレクトリ>に名前をcollection2にして配置します。

dataディレクトリ設定

<solrのホームディレクトリ>\collection2配下にデータディレクトリ作成します。

mkdir <solrのホームディレクトリ>\collection2\data

<solrのホームディレクトリ>\collection2\conf\solrconfig.xmlを編集します。

<dataDir>${solr.data.dir:}</dataDir>

上記の記述の${solr.data.dir:}を作成したデータディレクトリのパスに修正します。

<dataDir><solrのホームディレクトリ>\collection2\data</dataDir>
solrの管理画面よりコアを登録

以下にアクセスして管理画面を表示します。

http://localhost:8080/solr/

「Core Admin」リンク>「Add Core」タブ」を選択して、Add Coreの入力フォームを表示します。

solrの管理画面(Add Coreタブ)

以下を入力し「Add Core」ボタンを押下すれば構築完了です。

入力項目入力内容
name:collection2
instanceDir:<solrのホーム>\collection2
dataDir:<solrのホーム>\collection2\data
config:solrconfig.xml
schema:schema.xml

なお、成功すればsolrの管理画面にcollection1の下にcollection2が表示されます。

solrの管理画面(collection2追加後)

3. solrjの入門知識―Solrのドキュメント登録、検索の解説とJavaのサンプルコード

solrjなどのライブラリを使用してWebアプリケーションやバッチ処理などでドキュメントの登録や検索が行えます。 Excel、Word、PDFもあつかうことができます。 ここでは、Solrのドキュメント登録、検索の解説とJavaのサンプルコードなど、solrjの入門知識について見ていきます。

Solrにドキュメントを登録

Solrのダウンロード媒体に付属したサンプルのままの状態(スキーマ定義)でドキュメントを登録する例を紹介しています。

Solrにドキュメントを登録―solrjを使用した簡単なJavaのクライアントプログラムを作成

solrjを使用した簡単なJavaのクライアントプログラムを作成して、solrにドキュメントを登録する方法について見ていきます。

前の章のWindowsにSolrをインストールする方法で使用できるようにしたダウンロード媒体付属のサンプルに、 solrjを使用した簡単なJavaのクライアントプログラムを作成&使用して、ドキュメントを登録していきます。

Solrにリクエストを送るJavaのクライアントプログラムの作成

以下のサンプルコードを作成&コンパイルします。

import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.apache.solr.common.SolrInputDocument;
public class SolrRegistSample {
  public static void main(String[] args) throws Exception {
    // 初期化
    // 参考)CommonsHttpSolrServer」は、solr 4.0.ではHttpSolrServerに変更となった
    HttpSolrServer  server
         = new HttpSolrServer ("http://localhost:8080/solr/collection1");
    // ID=1の文書の類似文書を探すクエリを設定
    SolrInputDocument doc = new SolrInputDocument();
    doc.addField("id","SOLR9999");
    doc.addField("name","Solr, the Enterprise Search Server");
    doc.addField("manu","Apache Software Foundation");
    doc.addField("cat","software");
    doc.addField("features","Advanced Full-Text Search...");
    doc.addField("price", 0);
    doc.addField("popularity",10);
    doc.addField("inStock",true);
    doc.addField("incubationdate_dt","2006-01-17T00:00:00.000Z");
    // 検索実行
    UpdateResponse response = server.add(doc);
    server.commit();
    // 結果表示
    System.out.println(response.toString());
  }
}
Solrにドキュメントを登録

プロンプトより、サンプルプログラムを実行します。 登録が成功するとid:SOLR9999で1件データが取得できるようになります。

ブラウザのアドレスバーに以下を入力してリクエストを送れば結果が表示されます。

http://localhost:8080/solr/collection1/select?q=id:SOLR9999&wt=xml&indent=true

ブラウザに以下のように表示されれば成功です。

<?xml version="1.0" encoding="UTF-8"?>
<response>

<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">1</int>
<lst name="params">
<str name="indent">true</str>
<str name="q">id:SOLR9999</str>
<str name="wt">xml</str>
</lst>
</lst>
<result name="response" numFound="1" start="0">
<doc>
<str name="id">SOLR9999</str>
<str name="name">Solr, the Enterprise Search Server</str>
<str name="manu">Apache Software Foundation</str>
<arr name="cat">
<str>software</str>
</arr>
<arr name="features">
<str>Advanced Full-Text Search...</str>
</arr>
<float name="price">0.0</float>
<str name="price_c">0,USD</str>
<int name="popularity">10</int>
<bool name="inStock">true</bool>
<date name="incubationdate_dt">2006-01-17T00:00:00Z</date>
<long name="_version_">1430767135010848768</long></doc>
</result>
</response>

Solrに登録したドキュメントの検索

Solrのダウンロード媒体に付属したサンプルデータを登録して、SolrにGETリクエストを送信して検索する例を紹介しています。

Solrに登録したドキュメントの検索(ブラウザのアドレスバー使用)

ブラウザのアドレスバーを使用して、Solrに登録したドキュメントを検索する方法について掲載しています。

Solrのサンプルデータを登録し、ブラウザのアドレスバーにリクエストを入力してドキュメントを検索する方法を紹介しています。

Solrのサンプルデータを登録

Solrを配備したTomcatを起動し、<ダウンロードしたSolrの媒体置き場>\example\exampledocsにあるpost.jarを使用して、 同ディレクトリにあるサンプルデータ(*.xml)をSolrに送信します。

<ダウンロードしたSolrの媒体置き場>\example\exampledocsに移動します。

cd <ダウンロードしたSolrの媒体置き場>/example/exampledocs

post.jarを実行します。

java -Durl="http://localhost:8080/solr/update" -jar post.jar *.xml

「http://localhost:8080/solr/」にアクセスして、データが登録されていることを確認します。

送信後の管理画面
Solrに登録したドキュメントの検索

ブラウザのアドレスバーに以下を入力してリクエストを送れば結果が表示されます。

http://localhost:8080/solr/collection1/select?q=hello&wt=xml&indent=true

以下のようにブラウザに表示されます。

<?xml version="1.0" encoding="UTF-8"?>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">0</int>
<lst name="params">
<str name="indent">true</str>
<str name="q">hello</str>
<str name="wt">xml</str>
</lst>
</lst>
<result name="response" numFound="1" start="0">
<doc>
<str name="id">SOLR1000</str>
<str name="name">Solr, the Enterprise Search Server</str>
<str name="manu">Apache Software Foundation</str>
<arr name="cat">
<str>software</str>
<str>search</str>
</arr>
<arr name="features">
<str>Advanced Full-Text Search Capabilities using Lucene</str>
<str>Optimized for High Volume Web Traffic</str>
<str>Standards Based Open Interfaces - XML and HTTP</str>
<str>Comprehensive HTML Administration Interfaces</str>
<str>Scalability - Efficient Replication to other Solr Search Servers</str>
<str>Flexible and Adaptable with XML configuration and Schema</str>
<str>Good unicode support: h?llo (hello with an accent over the e)</str>
</arr>
<float name="price">0.0</float>
<str name="price_c">0,USD</str>
<int name="popularity">10</int>
<bool name="inStock">true</bool>
<date name="incubationdate_dt">2006-01-17T00:00:00Z</date>
<long name="_version_">1427412388241473536</long></doc>
</result>
</response>

Solrに登録したドキュメントの検索―solrjを使用した簡単なJavaのクライアントプログラムを作成

solrjを使用した簡単なJavaのクライアントプログラムを作成して、Solrに登録したドキュメントの検索を行ってみます。

Solrのサンプルデータを登録し、簡単なJavaのクライアントプログラムを作成&使用して、ドキュメントを検索する方法を紹介しています。

Solrのサンプルデータを登録

Solrを配備したTomcatを起動し、<ダウンロードしたSolrの媒体置き場>\example\exampledocsにあるpost.jarを使用して、 同ディレクトリにあるサンプルデータ(*.xml)をSolrに送信します。

<ダウンロードしたSolrの媒体置き場>\example\exampledocsに移動します。

cd <ダウンロードしたSolrの媒体置き場>/example/exampledocs

post.jarを実行します。

java -Durl="http://localhost:8080/solr/update" -jar post.jar *.xml

「http://localhost:8080/solr/」にアクセスして、データが登録されていることを確認します。

送信後の管理画面
SolrにGETリクエストを送るJavaのクライアントプログラムの作成

以下のサンプルコードを作成&コンパイルします。

package com.zealseeds.sample.solr;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class SolrSelectSample {

  public static void main(String[] args) {
    System.out.println(new SolrSelectSample().select());
  }

  public String select() {
    StringBuilder result = new StringBuilder();
    HttpURLConnection urlc = null;
    try {
      URL solrUrl = new URL("http://localhost:8080/solr/collection1/select"
          + "?q=hello&wt=xml&indent=true");
      urlc = (HttpURLConnection) solrUrl.openConnection();
      urlc.setRequestMethod("GET");
      urlc.setRequestProperty("Content-type", "text/xml; charset=UTF-8");
      urlc.connect();
      BufferedReader br = new BufferedReader(
                   new InputStreamReader(urlc.getInputStream(), "UTF-8"));
      while (true){
        String line = br.readLine();
        if (line == null)  break;
        result.append(line).append("\n");
      }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (urlc != null)  urlc.disconnect();
    }
    return result.toString();
  }
}
Solrに登録したドキュメントの検索

プロンプトより、サンプルプログラムを実行する(java SolrSelectSample.class)と以下のように表示されます。

<?xml version="1.0" encoding="UTF-8"?>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">0</int>
<lst name="params">
<str name="indent">true</str>
<str name="q">hello</str>
<str name="wt">xml</str>
</lst>
</lst>
<result name="response" numFound="1" start="0">
<doc>
<str name="id">SOLR1000</str>
<str name="name">Solr, the Enterprise Search Server</str>
<str name="manu">Apache Software Foundation</str>
<arr name="cat">
<str>software</str>
<str>search</str>
</arr>
<arr name="features">
<str>Advanced Full-Text Search Capabilities using Lucene</str>
<str>Optimized for High Volume Web Traffic</str>
<str>Standards Based Open Interfaces - XML and HTTP</str>
<str>Comprehensive HTML Administration Interfaces</str>
<str>Scalability - Efficient Replication to other Solr Search Servers</str>
<str>Flexible and Adaptable with XML configuration and Schema</str>
<str>Good unicode support: h?llo (hello with an accent over the e)</str>
</arr>
<float name="price">0.0</float>
<str name="price_c">0,USD</str>
<int name="popularity">10</int>
<bool name="inStock">true</bool>
<date name="incubationdate_dt">2006-01-17T00:00:00Z</date>
<long name="_version_">1427412388241473536</long></doc>
</result>
</response>

更新履歴

この記事の更新履歴です。

戻る

スポンサーリンク

サイト内のページ

言語
C・C++ /HTML /Java /JavaScript /PHP /シェルスクリプト

開発環境
Ant /Burp /Eclipse /Fiddler /gcc /gdb /Git /g++ /JDK /JMeter /JUnit /Teraterm /ZAP

技術・仕様
Ajax /CORBA /Jakarta EE(旧称J2EE、Java EE) /JNI

ライブラリ/Framework/CMS
bootstrap /jQuery /FuelPHP /Lucene /MyBatis /Seasar2 /Spring /Struts /WordPress

Web API
Google Maps

ITインフラOSとミドルウェア
Linux /Windows /シェル
ActiveMQ /Tomcat /MariaDB /MySQL /Nagios /Redis /Solr

ITインフラサーバー
公開Webサーバー

ITインフラネットワーク
プログラミング /構築

ITインフラセキュリティ
公開サーバーのセキュリティ

PC製品
ZOTAC

SI
ホームページの作り方

その他
IT用語 /ITスキル体系

スポンサーリンク

関連サイト内検索ツール

zealseedsおよび関連サイト内のページが検索できます。

IPアドレス確認ツール

あなたのグローバルIPアドレスは以下です。

44.197.113.64

HTMLの表示色確認ツール

パスワード生成ツール

文字数のプルダウンを選択して、取得ボタンを押すと「a~z、A~Z、0~9」の文字を ランダムに組み合わせた文字列が表示されます。

ここに生成されます。

スポンサーリンク