Tag Archives: Lucene

[Lucene]QueryParserによるOR検索とAND検索の切り替え

オープンソース検索エンジンLuceneで検索システムを開発していた時に
手間取った点があったので、ここに記す。

GoogleやYahoo、MSNなど大抵の検索エンジンでは、
空白区切りにキーワードを記述するとAND検索処理(絞り込み検索)が行われる。

しかし、LuceneはデフォルトでOR検索処理(または、あるいは検索)が行われる。
これだと、AND検索を行なうことができない。

OR検索からAND検索に切り替える方法があった。

独自QueryParserの作成 | 関口宏司のLuceneブログ

ここで書かれている問題は・・・QueryParserのsetDefaultOperator()で
ANDを指定しているとき、"A AND B OR C"という検索質問をQuery...

QueryParserのsetDefaultOperator()にANDを設定してやれば解決。

あやうくAND検索用の処理を書くところだった。

Javaオープンソース「Nutch」はクロール→インデクシング→検索までいける

Nutchというクローラ、インデクサ、検索を行なうオープンソースがあったので、

軽く触ってみた。

Nutch内部ではLucene、Hadoopが動作してるようなので、勉強にはちょうどいいかと思う。

早速、インストールから動作までの解説をする。



■クローラ

1.Nutch本体ダウンロード、解凍

# tar -xvzf nutch-0.9.tar.gz
# mv nutch-0.9 /usr/local/nutch



2.環境変数にパスを通す

# vi /etc/bashrc

export NUTCH_HOME=/usr/local/nutch
export PATH=${NUTCH_HOME}/bin:${PATH}

# source /etc/bashrc



3.クロール先を決める

クロール先URLリストを作成する。

今回は2サイトをクロールする予定。

# cd ${NUTCH_HOME}
# mkdir crawl_urls
# vi crawl_urls/corporate_sites

http://www.datasection.co.jp/

# vi crawl_urls/blogs

http://blog.mikuriya.biz/



要は作成したディレクトリcrawl_urls以下に1行1URLで

クロールしたいサイトの開始位置をどんどん記述するってことみたい。



4.クロールのフィルタ設定

今回のクロール対象は2サイトなので、それ以外はクロールしたくない。

以下のファイルに正規表現でフィルタリングを行なう。(正規表現はJava仕様)

# cd ${NUTCH_HOME}
# vi conf/crawl-urlfilter.txt

(修正前)
+^http://([a-z0-9]*\.)*MY.DOMAIN.NAME/
(修正後)
+^http://www\.datasection\.co\.jp/
+^http://blog\.mikuriya\.biz/

※よく見ると先頭に「+」とか「-」が入ってる。

クロールしたいURLパターンは「+」、クロールしたくないURLパターンは「-」を

このファイルに追加していくようだ。



5.クロール設定

クロール用の設定ファイルは初期段階では何も書かれていないので、

nutch-default.xmlをそのままコピーしてくる。

# cat conf/nutch-default.xml > nutch-site.xml

nutch-site.xmlの「http.agent.name」は必須っぽい。適当な名前をつけて。

私の場合は、クロールしたデータを「/usr/local/nutch/crawl_data」に

格納したいので以下を編集した。

# vi conf/nutch-site.xml
<property>
  <name>searcher.dir</name>
  <value>/usr/local/nutch/crawl_data</value> ← ここを編集した
  <description>
    ...
  </description>
</property>

nutch-site.xmlには、propertyのdescription属性に

設定の説明が書いてあるので、各自適当に読んで設定してもらいたい。



6.クロール開始

# /usr/local/nutch/bin/nutch crawl /usr/local/nutch/crawl_urls -dir /usr/local/nutch/crawl_data -depth 3 -topN 50 &

※なおcrawl_dataは勝手に作成されるので、いちいち作らなくてよい。



■WEBアプリケーション

Tomcatからクロールしたデータを検索表示することができるので、その設定を行なう。

${NUTCH_HOME}/nutch-0.9.warがその実体。

# cd ${NUTCH_HOME}
# mkdir nutch_web
# cp nutch-0.9.war nutch_web/
# cd nutch_web
# unzip nutch-0.9.war



解凍したアプリケーションの設定ファイルには、何も書かれていないので

クロール用で使用した設定ファイルを上書きしてやる。

# cp conf/nutch-site.xml nutch_web/WEB-INF/classes/nutch-site.xml



Tomcatで見れるようにシンボリックリンクを貼る。

# cd /usr/local/tomcat/webapps
# ln -s /usr/local/nutch/nutch_web nutch



Tomcat起動

# /usr/local/tomcat/bin/startup.sh



■検索結果のウェブ画面







形態素解析器Senの導入(日本語対応)、Hadoopによる分散(複数のサーバで運用)、

その他パフォーマンスなどは、もったいないから教えない。



■参考URL:

http://dev.team-lab.com/index.php?itemid=120

http://kazuhiro.ty.land.to/blog/2007/01/nutch.html