Symfoware

Symfowareについての考察blog

DebianにOpenJDK + Tomcat 7 + Solr 4.0 の環境を構築する

以前、DebianにSolr 3.5をインストールしてみました。
DebianにOpenJDK + Tomcat 7 + Solr 3.5.0 の環境を構築する


気がつくと、Solrが4.0にバージョンアップしています。
http://lucene.apache.org/solr/


復習がてら、
・Debian
・OpenJDK
・Tomcat 7
・Solr 4.0
の環境を作ってみます。





OpenJDKのインストール



OpenJDK(Java)は、apt-getでインストールしました。


# apt-get install openjdk-6-jdk





バージョン情報が表示できたら、インストール完了です。


# java -version
java version "1.6.0_18"
OpenJDK Runtime Environment (IcedTea6 1.8.13) (6b18-1.8.13-0+squeeze2)
OpenJDK Client VM (build 14.0-b16, mixed mode, sharing)










Tomcat 7のインストール




Tomcat 7 Downloads
http://tomcat.apache.org/download-70.cgi

ここから最新バージョンの、Binary DistributionsのCoreを取得し、
usr/local/jakartaに展開します。

今回ダウンロードしたファイルは「apache-tomcat-7.0.32.tar.gz」です。


# mkdir /usr/local/jakarta
# cd /usr/local/jakarta/
# wget http://ftp.yz.yamagata-u.ac.jp/pub/network/apache/tomcat/tomcat-7/v7.0.32/bin/apache-tomcat-7.0.32.tar.gz
# tar zxf apache-tomcat-7.0.32.tar.gz




apache-tomcat-7.0.32/binにあるstartup.shを実行して、起動を確認してみます。


# cd apache-tomcat-7.0.32/bin/
# ./startup.sh





ブラウザで、http://[サーバーIP]:8080/にアクセスして、以下の画面が表示されれば
Tomcatの起動は成功しています。

133_01.png



起動が確認できたので、shutdown.shを実行し、Tomcatを停止します。


# ./shutdown.sh





マイルールなのですが、/usr/local/tomcat7にシンボリックリンクを作成します。


# ln -s /usr/local/jakarta/apache-tomcat-7.0.32 /usr/local/tomcat7






起動用のスクリプトを/etc/init.d/tomcat7に作成します。


# vi /etc/init.d/tomcat7





内容は以下のとおり。


#! /bin/sh
### BEGIN INIT INFO
# Provides: tomcat7
# Required-Start: $all
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: tomcat7 servlet server
# Description: tomcat7 servlet server
### END INIT INFO

DESC="tomcat7 servlet server"
NAME=tomcat7
DAEMON1=/usr/local/tomcat7/bin/startup.sh
DAEMON2=/usr/local/tomcat7/bin/shutdown.sh
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

export JAVA_HOME=/usr/lib/jvm/java-6-openjdk
export TOMCAT_HOME=/usr/local/tomcat7

. /lib/lsb/init-functions

case "$1" in
start)
    echo -n "Starting servlet server: $NAME"
    $DAEMON1
    ;;
stop)
    echo -n "Stopping servlet server: $NAME"
    $DAEMON2
    ;;
*)
    echo "Usage: $SCRIPTNAME {start|stop}" >&2
    exit 1
    ;;
esac
exit 0






実行権限を付与しておきます。


# chmod +x /etc/init.d/tomcat7





起動はstart、停止はstopです。


### 起動
# /etc/init.d/tomcat7 start


### 停止
# /etc/init.d/tomcat7 stop




OS起動時に自動起動させる場合。


# insserv tomcat7




自動起動を解除する場合。


# insserv -r tomcat7











Solr 4.0の取得と展開




http://lucene.apache.org/solr/

ここの右側にあるDOWNLOADをクリックすると、ダウンロードサイトの一覧が表示されます。

133_02.png

133_03.png


ダウロードサイトのURLをクリックすると、SolrのダウンロードURLが表示されます。

133_04.png



近くのサイトを選んで、apache-solr-4.0.0.tgzをダウンロードします。
今回は、/usr/local/src/にapache-solr-4.0.0.tgzをダウンロードし、解凍しました。


# cd /usr/local/src/
# wget http://ftp.yz.yamagata-u.ac.jp/pub/network/apache/lucene/solr/4.0.0/apache-solr-4.0.0.tgz
# tar zxf apache-solr-4.0.0.tgz





必要な設定ファイルや、jarファイルを保存するディレクトリを作成します。
今回は、/usr/local/solrとしました。


# mkdir /usr/local/solr




apache-solr-4.0.0.tgzを解凍したディレクトリから必要な設定ファイルや
jarファイルをサキほど作成した/usr/local/solrにコピーします。


# cp -r /usr/local/src/apache-solr-4.0.0/example/solr/* /usr/local/solr
# cp -r /usr/local/src/apache-solr-4.0.0/contrib/ /usr/local/solr/
# cp -r /usr/local/src/apache-solr-4.0.0/dist/ /usr/local/solr/





コピーした設定ファイル「/usr/local/solr/collection1/conf/solrconfig.xml」に、
jarファイルのパスが記載されています。

とりあえず起動させたかったので、絶対パスに変更します。


# vi /usr/local/solr/collection1/conf/solrconfig.xml




jarファイルのパスが記載されている箇所の抜粋です。


<!-- A 'dir' option by itself adds any files found in the directory
     to the classpath, this is useful for including all jars in a
     directory.

     When a 'regex' is specified in addition to a 'dir', only the
     files in that directory which completely match the regex
     (anchored on both ends) will be included.

     The examples below can be used to load some solr-contribs along
     with their external dependencies.
    -->
<lib dir="../../../contrib/extraction/lib" regex=".*\.jar" />
<lib dir="../../../dist/" regex="apache-solr-cell-\d.*\.jar" />

<lib dir="../../../contrib/clustering/lib/" regex=".*\.jar" />
<lib dir="../../../dist/" regex="apache-solr-clustering-\d.*\.jar" />

<lib dir="../../../contrib/langid/lib/" regex=".*\.jar" />
<lib dir="../../../dist/" regex="apache-solr-langid-\d.*\.jar" />

<lib dir="../../../contrib/velocity/lib" regex=".*\.jar" />
<lib dir="../../../dist/" regex="apache-solr-velocity-\d.*\.jar" />




「contrib」「dist」はそれぞれ、「/usr/local/solr/contrib」「/usr/local/solr/dist」に
コピーしたので、そのパスに変更してやります。

変更後の内容は以下のとおり。


<!-- A 'dir' option by itself adds any files found in the directory
     to the classpath, this is useful for including all jars in a
     directory.

     When a 'regex' is specified in addition to a 'dir', only the
     files in that directory which completely match the regex
     (anchored on both ends) will be included.

     The examples below can be used to load some solr-contribs along
     with their external dependencies.
    -->
<lib dir="/usr/local/solr/contrib/extraction/lib" regex=".*\.jar" />
<lib dir="/usr/local/solr/dist/" regex="apache-solr-cell-\d.*\.jar" />

<lib dir="/usr/local/solr/contrib/clustering/lib/" regex=".*\.jar" />
<lib dir="/usr/local/solr/dist/" regex="apache-solr-clustering-\d.*\.jar" />

<lib dir="/usr/local/solr/contrib/langid/lib/" regex=".*\.jar" />
<lib dir="/usr/local/solr/dist/" regex="apache-solr-langid-\d.*\.jar" />

<lib dir="/usr/local/solr/contrib/velocity/lib" regex=".*\.jar" />
<lib dir="/usr/local/solr/dist/" regex="apache-solr-velocity-\d.*\.jar" />







次に、webアプリケーションのフロントとして動作するファイルを展開します。
/opt/solrに配置することにしました。

apache-solr-4.0.0.tgzを回答したフォルダのdist/apache-solr-4.0.0.warを
/opt/solrに展開します。

※unzipを使用します。インストールされていない場合は、apt-get install unzipでインストール。


# mkdir /opt/solr
# cd /opt/solr
# unzip /usr/local/src/apache-solr-4.0.0/dist/apache-solr-4.0.0.war






/opt/solrをhttp://[サーバーIP]:8080/solrというURLで公開するための
設定ファイルを作成します。


# vi /usr/local/tomcat7/conf/Catalina/localhost/solr.xml




内容は以下のとおり。


<?xml version="1.0" encoding="utf-8"?>
<Context docBase="/opt/solr/" debug="0" crossContext="true">
    <Environment name="solr/home" type="java.lang.String" value="/usr/local/solr" override="true"/>
</Context>



Environmentタグで、「solr/homr」に設定ファイルやjarファイルを配置した
「/usr/local/solr」を指定します。
これがないと動きません。





ここまでできたらおもむろにTomcatを起動します。


# /etc/init.d/tomcat7 start





ブラウザでhttp://[サーバーIP]:8080/solr/を表示してみます。

133_05.png


ちゃんと動いたみたいです。
Solr 3.5の時に比べて、画面がリッチになってます。



前のバージョンからあったのかもしれませんが、コレクションという概念が導入されたようです。
コレクション毎にスキーマの設定等を細かく指定できる模様。
これは便利かも。

133_06.png




テーマ:データベース - ジャンル:コンピュータ

  1. 2012/11/18(日) 21:02:37|
  2. apache solr
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集

lucene-gosenで、検索結果から除外するTokenを指定する(solr.JapanesePartOfSpeechStopFilterFactory)

lucene-gosenのドキュメントを読んでいると、検索結果から除外したい
Tokenを指定できることを知りました。
http://www.slideshare.net/JunOhtani/lucene-gosen-solr7

確かに、記号や感嘆符はインデックスから除外したいかもしれません。



schema.xml



除外するTokenを指定する設定ファイルが必要です。
サンプルはリポジトリに登録されています。
http://code.google.com/p/lucene-gosen/source/browse/trunk/src/resources/org/apache/lucene/analysis/ja/stoptags_ja.txt

また、このファイルはlucene-gosen-xxx.jarに含まれていますので、今回はjar内のstoptags_ja.txtを
指定することにしました。

別途、除外ルールを指定したい場合は設定ファイルを作成し、
solr/homeのconfディレクトリ(例えば、/usr/local/solr/conf/)に配置して
ファイル名を指定するようです。


作成したschema.xmlはこのようになりました。

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <schema name="example" version="1.4">
  3. <types>
  4.     <!-- The StrField type is not analyzed, but indexed/stored verbatim. -->
  5.     <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
  6.     <fieldType name="long" class="solr.TrieLongField" precisionStep="0" omitNorms="true" positionIncrementGap="0"/>
  7.     <fieldType name="text_ja" class="solr.TextField" positionIncrementGap="100">
  8.         <analyzer>
  9.             <tokenizer class="solr.JapaneseTokenizerFactory" />
  10.             <filter class="solr.JapanesePartOfSpeechStopFilterFactory" tags="org/apache/lucene/analysis/ja/stoptags_ja.txt" enablePositionIncrements="true" />
  11.         </analyzer>
  12.     </fieldType>
  13. </types>
  14. <fields>
  15. <field name="id" type="string" indexed="true" stored="true" required="true" />
  16. <field name="title" type="text_ja" indexed="true" stored="true" />
  17. <field name="body" type="text_ja" indexed="true" stored="true" />
  18. </fields>
  19. <uniqueKey>id</uniqueKey>
  20. <defaultSearchField>body</defaultSearchField>
  21. <solrQueryParser defaultOperator="AND"/>
  22. </schema>




最初、filterをどのように指定すればよいかわからなかったのですが、
analyzerタグの中にfilterを指定するようです。






テスト



このblogの内容を登録して、以下のプログラムで検索してみました。


  1. # -*- coding:utf-8 -*-
  2. import solr
  3. s = solr.SolrConnection('http://192.168.1.4:8080/solr')
  4. # 検索
  5. response = s.query(u'body:「')
  6. for hit in response.results:
  7.     print hit['id'], hit['title']




filterを指定していないschema.xmlを使用した場合は検索結果が表示されましたが、
filterを指定している場合は検索結果0件でした。


しばらく勘違いしていたのですが、filterは登録時ではなく、検索時に有効になるようです。
そのため、filterを指定していない状態でデータ登録していても、filterを
有効にして検索すれば検索結果は0件になります。


テーマ:データベース - ジャンル:コンピュータ

  1. 2012/01/19(木) 23:49:05|
  2. apache solr
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集

Debian に Tomcat 7 + Apache Solr 3.5.0 + 日本語検索対応環境を構築(Kuromoji使用)

lucene-gosenを使用して、solrで日本語の検索が行えるようにしてみました。
Debian に Tomcat 7 + Apache Solr 3.5.0 + 日本語検索対応環境を構築(lucene-gosen使用)


ふと、以下の記事を読んでいると「Kuromoji」という日本語解析用のライブラリもあるようです。
検索エンジンの常識をApache Solrで身につける

Introducing Kuromoji


こちらで作成した、Debian + Tomcat 7 + Apache Solr 3.5.0の環境で動かしてみます。
DebianにOpenJDK + Tomcat 7 + Solr 3.5.0 の環境を構築する





Kuromoji



Debianに構築しているSolr3.5.0の環境は、
・Tomcat 7で動作
・solr/homeは、/usr/local/solr
・solrのweb部分は/opt/solr/
となっています。


http://atilika.org/confluence/pages/viewpage.action?pageId=131093
こちらを参考に、設定を行いました。



solr/WEB-INF/libに
・kuromoji-0.7.5.jar
・kuromoji-solr-0.5.1.jar
の2つのファイルを配置します。


# cd /opt/solr/WEB-INF/lib
# wget http://atilika.org/nexus/content/repositories/atilika/org/atilika/kuromoji/kuromoji/0.7.5/kuromoji-0.7.5.jar
# wget http://atilika.org/nexus/content/repositories/atilika/org/atilika/kuromoji/kuromoji-solr/0.5.1/kuromoji-solr-0.5.1.jar





次に、/usr/local/solr/conf/schema.xmlを編集し、org.atilika.kuromoji.solr.KuromojiTokenizerFactoryを
使用してデータを解析するフィールド「text_kuromoji」を作成しました。

サンプルとして、schema.xmlはこのようにしました。


  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <schema name="example" version="1.4">
  3. <types>
  4.     <!-- The StrField type is not analyzed, but indexed/stored verbatim. -->
  5.     <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
  6.     <fieldType name="long" class="solr.TrieLongField" precisionStep="0" omitNorms="true" positionIncrementGap="0"/>
  7.     <fieldType name="text_kuromoji" class="solr.TextField">
  8.         <analyzer>
  9.             <tokenizer class="org.atilika.kuromoji.solr.KuromojiTokenizerFactory" mode="search" user-dictionary=""/>
  10.         </analyzer>
  11.     </fieldType>
  12. </types>
  13. <fields>
  14. <field name="id" type="string" indexed="true" stored="true" required="true" />
  15. <field name="title" type="text_kuromoji" indexed="true" stored="true" />
  16. <field name="body" type="text_kuromoji" indexed="true" stored="true" />
  17. </fields>
  18. <uniqueKey>id</uniqueKey>
  19. <defaultSearchField>body</defaultSearchField>
  20. <solrQueryParser defaultOperator="AND"/>
  21. </schema>








Tomcatを再起動し、solrの管理画面を見てみるとちゃんと設定が反映されているようです。

44_001.png



Apache Solr 3.5.0にPythonからデータの登録・検索を行う(solrpy使用)
ここで実行したのと同じPythonのプログラムを実行してみたところ、
同様の結果が得られました。







lucene-gosenとKuromojiの比較



Kuromojiの特徴として、「関西国際空港」という文字列を登録したとき、
「関西」「国際」「空港」「関西国際空港」のいずれでもヒットするよと
紹介さていたので、試してみました。


schema.xmlで、solr.JapaneseTokenizerFactoryを使用するbody1と
org.atilika.kuromoji.solr.KuromojiTokenizerFactoryを使用するbody2を定義します。


  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <schema name="example" version="1.4">
  3. <types>
  4.     <!-- The StrField type is not analyzed, but indexed/stored verbatim. -->
  5.     <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
  6.     <fieldType name="long" class="solr.TrieLongField" precisionStep="0" omitNorms="true" positionIncrementGap="0"/>
  7.     <fieldType name="text_ja" class="solr.TextField" positionIncrementGap="100">
  8.         <analyzer>
  9.             <tokenizer class="solr.JapaneseTokenizerFactory" />
  10.         </analyzer>
  11.     </fieldType>
  12.     <fieldType name="text_kuromoji" class="solr.TextField">
  13.         <analyzer>
  14.             <tokenizer class="org.atilika.kuromoji.solr.KuromojiTokenizerFactory" mode="search" user-dictionary=""/>
  15.         </analyzer>
  16.     </fieldType>
  17. </types>
  18. <fields>
  19. <field name="id" type="string" indexed="true" stored="true" required="true" />
  20. <field name="body1" type="text_ja" indexed="true" stored="true" />
  21. <field name="body2" type="text_kuromoji" indexed="true" stored="true" />
  22. </fields>
  23. <uniqueKey>id</uniqueKey>
  24. <defaultSearchField>body1</defaultSearchField>
  25. <solrQueryParser defaultOperator="AND"/>
  26. </schema>





body1、body2ともに「関西国際空港」と登録し、検索してみました。


  1. # -*- coding:utf-8 -*-
  2. import solr
  3. def query_test(s, keyword):
  4.     response = s.query(keyword)
  5.     for hit in response.results:
  6.         print(keyword)
  7.     
  8. s = solr.SolrConnection('http://192.168.1.4:8080/solr')
  9. s.add(id=1, body1=u'関西国際空港', body2=u'関西国際空港')
  10. s.commit()
  11. # 検索
  12. query_test(s, u'body1:関西')
  13. query_test(s, u'body1:国際')
  14. query_test(s, u'body1:空港')
  15. query_test(s, u'body1:関西国際')
  16. query_test(s, u'body1:国際空港')
  17. query_test(s, u'body1:関西国際空港')
  18. query_test(s, u'body2:関西')
  19. query_test(s, u'body2:国際')
  20. query_test(s, u'body2:空港')
  21. query_test(s, u'body2:関西国際')
  22. query_test(s, u'body2:国際空港')
  23. query_test(s, u'body2:関西国際空港')





実行結果は以下のとおり。


$ python sample.py
body1:関西国際空港
body2:関西
body2:国際
body2:空港
body2:関西国際
body2:国際空港
body2:関西国際空港




lucene-gosenでは、「関西国際空港」でしかヒットしていないのに対し、
Kuromojiでは「関西国際」とかでもヒットしてくれました。

※lucene-gosenでも設定を変更すれば同様の動作が行えるのかもです。






テーマ:データベース - ジャンル:コンピュータ

  1. 2012/01/19(木) 22:09:19|
  2. apache solr
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集

Apache Solr 3.5.0にPythonからデータの登録・検索を行う(solrpy使用)

DebianにTomcat 7 + Apache Solr 3.5.0の環境を構築し、日本語検索が行えるように設定しました。

DebianにOpenJDK + Tomcat 7 + Solr 3.5.0 の環境を構築する
Debian に Tomcat 7 + Apache Solr 3.5.0 + 日本語検索対応環境を構築(lucene-gosen使用)



schema.xmlは、このようにid(long)、title(text_ja)、body(text_ja)の
3つのフィールドを持つように指定しています。


  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <schema name="example" version="1.4">
  3. <types>
  4.     <!-- The StrField type is not analyzed, but indexed/stored verbatim. -->
  5.     <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
  6.     <fieldType name="long" class="solr.TrieLongField" precisionStep="0" omitNorms="true" positionIncrementGap="0"/>
  7.     <fieldType name="text_ja" class="solr.TextField" positionIncrementGap="100">
  8.         <analyzer>
  9.             <tokenizer class="solr.JapaneseTokenizerFactory" />
  10.         </analyzer>
  11.     </fieldType>
  12. </types>
  13. <fields>
  14. <field name="id" type="string" indexed="true" stored="true" required="true" />
  15. <field name="title" type="text_ja" indexed="true" stored="true" />
  16. <field name="body" type="text_ja" indexed="true" stored="true" />
  17. </fields>
  18. <uniqueKey>id</uniqueKey>
  19. <defaultSearchField>body</defaultSearchField>
  20. <solrQueryParser defaultOperator="AND"/>
  21. </schema>




このスキーマに対して、Pythonからデータの登録・検索を行ってみます。







solrpy



Solr wikiにsolrpyというAPIが紹介されています。
http://wiki.apache.org/solr/SolPython

solrpyのサイトはこちら。
http://code.google.com/p/solrpy/


これを使ってみることにしました。

easy_installでインストールします。


$ sudo easy_install solrpy










登録と検索のサンプル



solrpyに掲載されているのと同じ内容ですが、日本語が登録できるか試してみました。


  1. # -*- coding:utf-8 -*-
  2. import solr
  3. s = solr.SolrConnection('http://192.168.1.4:8080/solr')
  4. # 登録
  5. s.add(id=1, title=u'テスト', body=u'Pythonからsolrpyを使って日本語を登録するテスト')
  6. s.commit()
  7. # 検索
  8. response = s.query(u'body:日本語')
  9. for hit in response.results:
  10.     print hit['id'], hit['title'], hit['body']





実行してみると、狙い通りの動作になっています。


$ python solr_update.py
1 テスト Pythonからsolrpyを使って日本語を登録するテスト





管理画面からもデータの登録が確認できました。

43_001.png








削除のサンプル



上記で登録したデータを削除してみます。
削除にはdelete_queryを使用します。


  1. # -*- coding:utf-8 -*-
  2. import solr
  3. s = solr.SolrConnection('http://192.168.1.4:8080/solr')
  4. # idを指定して削除
  5. s.delete_query("id:1")
  6. s.commit()
  7. # 検索
  8. response = s.query(u'body:日本語')
  9. print '検索結果:', len(response.results)




実行してみると、データが削除されたことが確認できました。


$ python solr_update.py
検索結果: 0











FC2ブログのデータを登録



管理メニューの[データのバックアップ]から今まで登録した記事をダウンロードして、
内容をSolrに登録してみます。

43_002.png




かなり適当ですが、htmlタグを除去してsolrに登録してみます。


  1. # -*- coding:utf-8 -*-
  2. import solr
  3. import codecs
  4. import sgmllib
  5. class Stripper(sgmllib.SGMLParser):
  6.     def __init__(self):
  7.         sgmllib.SGMLParser.__init__(self)
  8.     def strip(self, some_html):
  9.         self.theString = ""
  10.         self.feed(some_html)
  11.         self.close()
  12.         return self.theString
  13.     def handle_data(self, data):
  14.         self.theString += data
  15. stripper = Stripper()
  16. s = solr.SolrConnection('http://192.168.1.4:8080/solr')
  17. with codecs.open('symfoware.txt', 'r', 'euc-jp') as f:
  18.     index = 0
  19.     state = True
  20.     isbody = False
  21.     title = ""
  22.     body = ""
  23.     
  24.     for line in f:
  25.         line = line.strip()
  26.         
  27.         if line == '--------':
  28.             state = True
  29.             isbody = False
  30.             
  31.         elif line == '-----':
  32.             state = False
  33.             isbody = False
  34.             if body != "":
  35.                 s.add(id=index, title=unicode(title), body=unicode(stripper.strip(body)))
  36.                 s.commit()
  37.                 body = ""
  38.             
  39.         
  40.         if state and line.startswith('TITLE: '):
  41.             index += 1
  42.             title = line[7:]
  43.         if isbody:
  44.             body += line + "\n"
  45.         
  46.         if line == 'BODY:':
  47.             isbody = True




htmlタグの除去は、こちらのソースを参考にさせていただきました。
Python で HTML タグを取り除く方法




スペース区切りでキーワードを指定すると、AND検索になります。


  1. # -*- coding:utf-8 -*-
  2. import solr
  3. s = solr.SolrConnection('http://192.168.1.4:8080/solr')
  4. # 検索
  5. response = s.query(u'body:Debian Solr アプリケーション')
  6. for hit in response.results:
  7.     print hit['id'], hit['title']





ちゃんと検索できているようです。


$ python solr_update.py
193 Solrを使用したblog記事検索サンプル
198 XMLデータベース eXistをDebian + Tomcat環境にインストール
186 Debian に Tomcat + Apache Solr + 日本語検索対応環境を構築
839 DebianにOpenJDK + Tomcat 7 + Solr 3.5.0 の環境を構築する





テーマ:プログラミング - ジャンル:コンピュータ

  1. 2012/01/19(木) 01:07:06|
  2. apache solr
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集

Debian に Tomcat 7 + Apache Solr 3.5.0 + 日本語検索対応環境を構築(lucene-gosen使用)

かなり日が開いてしまいましたが、以前構築したSolr 3.5.0の環境で
日本語の検索が行えるようにしてみます。

環境構築時の記事はこちら。
DebianにOpenJDK + Tomcat 7 + Solr 3.5.0 の環境を構築する

また、Solr1.3に日本語検索対応環境を構築したときの記事はこちらになります。
Debian に Tomcat + Apache Solr + 日本語検索対応環境を構築



lucene-gosen



Solr1.3の時に日本語検索の環境を作成したときは、えらく手間がかかったのですが、
lucene-gosenというライブラリを使用すればお手軽に日本語検索環境が作成できそうです。

http://code.google.com/p/lucene-gosen/

こちらを参考にさせて頂きました。
Apache Solr 3.3.0 で日本語検索できるようになるまでにしたこと


今回、Debianに構築しているSolr3.5.0の環境は、
・Tomcat 7で動作
・solr/homeは、/usr/local/solr
・solrのweb部分は/opt/solr/
となっています。

まず、solr/WEB-INF/libにlucene-gosenのjarファイルをダウンロードして配置します。


# cd /opt/solr/WEB-INF/lib
# wget http://lucene-gosen.googlecode.com/files/lucene-gosen-1.2.1-ipadic.jar




次に、/usr/local/solr/conf/schema.xmlを編集し、solr.JapaneseTokenizerFactoryを
使用してデータを解析するフィールド「text_ja」を作成しました。

サンプルとして、schema.xmlはこのようにしました。


  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <schema name="example" version="1.4">
  3. <types>
  4.     <!-- The StrField type is not analyzed, but indexed/stored verbatim. -->
  5.     <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
  6.     <fieldType name="long" class="solr.TrieLongField" precisionStep="0" omitNorms="true" positionIncrementGap="0"/>
  7.     <fieldType name="text_ja" class="solr.TextField" positionIncrementGap="100">
  8.         <analyzer>
  9.             <tokenizer class="solr.JapaneseTokenizerFactory" />
  10.         </analyzer>
  11.     </fieldType>
  12. </types>
  13. <fields>
  14. <field name="id" type="string" indexed="true" stored="true" required="true" />
  15. <field name="title" type="text_ja" indexed="true" stored="true" />
  16. <field name="body" type="text_ja" indexed="true" stored="true" />
  17. </fields>
  18. <uniqueKey>id</uniqueKey>
  19. <defaultSearchField>body</defaultSearchField>
  20. <solrQueryParser defaultOperator="AND"/>
  21. </schema>




サンプルとして、このblogの記事をデータ登録してみようと思っているので
id,title,bodyという3つのフィールドを作成しました。


ファイルの編集が終わったら、Tomcatを再起動します。

http://www.example.com:8080/solr/admin/schema.jspにアクセスしてみると、
正しく設定が反映されているか確認できると思います。

42_001.png



lucene-gosenのおかげで、とても設定が簡単になりました。
今度は、Pythonからデータの登録や検索を試してみようと思います。




【参考URL】

Apache Solr 3.3.0 で日本語検索できるようになるまでにしたこと
http://d.hatena.ne.jp/lettas0726/20110711/1310375789

Java製形態素解析ライブラリ「lucene-gosen」を試してみる
http://www.mwsoft.jp/programming/munou/lucene_gosen.html

テーマ:サーバ - ジャンル:コンピュータ

  1. 2012/01/18(水) 23:57:05|
  2. apache solr
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
次のページ