Apache Solrとは、読み方はソーラ、フリー最高峰ともいえる全文検索システム構築用のソフトウェアです。Excel、Word、PDFも全文検索できます。本記事に全文検索の構築、solrjの使い方などApache Solrの入門知識をまとめました。
この記事の目次です。
1. Solrの概要―Apache Solr(ソーラ)とは何か
3. solrjの入門知識―Solrのドキュメント登録、検索の解説とJavaのサンプルコード
Apache Solr(ソーラ)は、 全文検索エンジンライブラリLuceneをベースに、管理画面やキャッシュ機構を取り入れたオープンソースの全文検索システムです。 POIなどApacheのライブラリがたくさん組み込まれており、Excel、Word、PDFも全文検索できます。 まさに、フリー最高峰と言えるフリーの検索ソフトです。
Lucene(ルシーン)は、Apacheソフトウェア財団のLuceneプロジェクトで開発されている全文検索用のJavaのクラスライブラリです。 Solr(ソーラ)は、Luceneプロジェクトのサブプロジェクトとして開発されています。
Solrの構築方法の概要について見ていきます。詳細は「2. Solr構築の入門知識―インストール、マルチコアなど」で見ていきます。
たとえば、Tomcatの<Tomcatホーム>\webapps\solrにweb表示するものを置いて、それ以外のファイルは、別にsolrのホームディレクトリを作るイメージでインストールできます。
一つの Solr でコア(インデックス格納先)を複数作成する方法をマルチコアといいます。 solrホームにsolrの設定ファイルを配置し、solrの管理画面よりコアを登録する操作で行えます。
Solrの設定ファイルには以下のようなものがあります。
solrjなどのライブラリを使用してWebアプリケーションやバッチ処理などでドキュメントの登録や検索が行えます。 Excel、Word、PDFもあつかうことができます。 solrjの詳細については「3. solrjの入門知識―Solrのドキュメント登録、検索の解説とJavaのサンプルコード」で見ていきます。
インストール、マルチコアなど、Solr構築の入門知識について見ていきます。
たとえば、Tomcatの<Tomcatホーム>\webapps\solrにweb表示するものを置いて、それ以外のファイルは、別にsolrのホームディレクトリを作るイメージでインストールできます。
Windows上のTomcatにsolrを配置して、solrの管理画面を表示させるところまでを紹介しています。
http://www.apache.org/dyn/closer.cgi/lucene/solr/4.1.0より、solr-4.1.0.zipをダウンロードし、解凍します。
<Tomcatホーム>\webapps\solrにはweb表示するものを置いて、それ以外のファイルは、別にsolrのホームディレクトリを作ることにします。
ここでは、先に<Tomcatホーム>\webapps\solrを配置&設定します。
停止状態の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ファイル展開先パス>"
Tomcatを一回起動してコピーしたwarを解凍します。 <Tomcatホーム>\webapps\solr\ができたことを確認します。 解凍したらTomcatを停止します。
<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>
--> ←コメントを解除する
上でも書きましたが、<Tomcatホーム>\webapps\solrにはweb表示するものを置いて、それ以外のファイルは、別にsolrのホームディレクトリを作ることにしています。
mkdir <solrのホームディレクトリ>
<solr-4.1.0.zip解凍先>\example\solr\collection1を<solrのホームディレクトリ>にコピーします。
<solrのホームディレクトリ>\collection1配下にデータディレクトリ作成します。
mkdir <solrのホームディレクトリ>\collection1\data
<solrのホームディレクトリ>\collection1\conf\solrconfig.xmlを編集します。
<dataDir>${solr.data.dir:}</dataDir>
上記の記述の${solr.data.dir:}を作成したデータディレクトリのパスに修正します。
<dataDir><solrのホームディレクトリ>\collection1\data</dataDir>
Tomcatを起動し、以下にアクセスして管理画面が表示されればOKです。
http://localhost:8080/solr/
一つの Solr でコア(インデックス格納先)を複数作成する方法をマルチコアといいます。 solrホームにsolrの設定ファイルを配置し、solrの管理画面よりコアを登録する操作で行えます。
Solrでコア(SolrCore)を増やす方法(サンプルのコア(collection1)を複製)を紹介しています。
先ほど、WindowsにSolrをインストールする方法で作成したcollection1を複製してcollection2を構築する方法を紹介しています。
<solr-4.1.0.zip解凍先>\example\solr\collection1のコピーを<solrのホームディレクトリ>に名前をcollection2にして配置します。
<solrのホームディレクトリ>\collection2配下にデータディレクトリ作成します。
mkdir <solrのホームディレクトリ>\collection2\data
<solrのホームディレクトリ>\collection2\conf\solrconfig.xmlを編集します。
<dataDir>${solr.data.dir:}</dataDir>
上記の記述の${solr.data.dir:}を作成したデータディレクトリのパスに修正します。
<dataDir><solrのホームディレクトリ>\collection2\data</dataDir>
以下にアクセスして管理画面を表示します。
http://localhost:8080/solr/
「Core Admin」リンク>「Add Core」タブ」を選択して、Add Coreの入力フォームを表示します。
以下を入力し「Add Core」ボタンを押下すれば構築完了です。
入力項目 | 入力内容 |
---|---|
name: | collection2 |
instanceDir: | <solrのホーム>\collection2 |
dataDir: | <solrのホーム>\collection2\data |
config: | solrconfig.xml |
schema: | schema.xml |
なお、成功すればsolrの管理画面にcollection1の下にcollection2が表示されます。
solrjなどのライブラリを使用してWebアプリケーションやバッチ処理などでドキュメントの登録や検索が行えます。 Excel、Word、PDFもあつかうことができます。 ここでは、Solrのドキュメント登録、検索の解説とJavaのサンプルコードなど、solrjの入門知識について見ていきます。
Solrのダウンロード媒体に付属したサンプルのままの状態(スキーマ定義)でドキュメントを登録する例を紹介しています。
solrjを使用した簡単なJavaのクライアントプログラムを作成して、solrにドキュメントを登録する方法について見ていきます。
前の章のWindowsにSolrをインストールする方法で使用できるようにしたダウンロード媒体付属のサンプルに、 solrjを使用した簡単な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());
}
}
プロンプトより、サンプルプログラムを実行します。 登録が成功すると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にGETリクエストを送信して検索する例を紹介しています。
ブラウザのアドレスバーを使用して、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/」にアクセスして、データが登録されていることを確認します。
ブラウザのアドレスバーに以下を入力してリクエストを送れば結果が表示されます。
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>
solrjを使用した簡単なJavaのクライアントプログラムを作成して、Solrに登録したドキュメントの検索を行ってみます。
Solrのサンプルデータを登録し、簡単なJavaのクライアントプログラムを作成&使用して、ドキュメントを検索する方法を紹介しています。
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/」にアクセスして、データが登録されていることを確認します。
以下のサンプルコードを作成&コンパイルします。
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();
}
}
プロンプトより、サンプルプログラムを実行する(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インフラセキュリティ
公開サーバーのセキュリティ
SI
ホームページの作り方
スポンサーリンク
関連サイト内検索ツール
zealseedsおよび関連サイト内のページが検索できます。
IPアドレス確認ツール
あなたのグローバルIPアドレスは以下です。
3.15.145.50
HTMLの表示色確認ツール
パスワード生成ツール
文字数のプルダウンを選択して、取得ボタンを押すと「a~z、A~Z、0~9」の文字を ランダムに組み合わせた文字列が表示されます。
ここに生成されます。
スポンサーリンク
Copyright (C) 2007-2024 zealseeds. All Rights Reserved. Loarding…