関口宏司のLuceneブログ

OSS検索ライブラリのLuceneおよびそのサブプロジェクト(Solr/Tika/Mahoutなど)について
<< 第2回 Rails開発者向け全文検索エンジンSolrの無料セミナー開催 | main | StopFilterとフレーズ検索 >>
スポンサーサイト

一定期間更新がないため広告を表示しています

| スポンサードリンク | - | | - | - |
LuceneとSennaの比較:特徴語検索
Sennaではクエリー書式に"*S"を指定すると、指定した文書(文字列)に含まれる「特徴語」を含む文書を検索できる。Luceneでは同様のことはcontribのMoreLikeThisで可能である。

Luceneの通常の検索プログラムでは、検索結果(文書一覧)はsearcherにqueryを渡して取得する。つまり、次のような具合である:



searcher(query)



MoreLikeThisではqueryの代わりに文書を渡して文書に関連した文書を取得する。つまり、次のような具合だ:



searcher(doc)



しかし実際にはこのようなメソッドはない。searcher()はqueryを取るのみである。そこでMoreLikeThisの出番となる。

MoreLikeThisにはlike()メソッドというのがあり、like()メソッドに文書を渡すと、その文書の「特徴語」からなるquery(BooleanQuery)を生成してくれる。つまり、次のように書くことができる:



searcher(MoreLikeThis.like(doc))



like()メソッドが文書から取り出す特徴語は、Senna同様、文書の頻出語である。しかし容易に想像できるとおり、頻出語にはゴミが非常に多く混ざってしまう。そこでLuceneのMoreLikeThisでは、ストップワードを指定したり、Analyzerを指定したり、その他ゴミ語を取り除くための各種setterメソッドが用意されている。

MoreLikeThisを使う手順は次のようになる(疑似コード):



IndexReader reader = IndexReader.open( dir );
IndexSearcher searcher = new IndexSearcher( dir );
MoreLikeThis mlt = new MoreLikeThis( reader );
mlt.setAnalyzer( analyzer );
mlt.setFieldNames( fieldName );
mlt.setStopWords( stopWords );
Query query = mlt.like( new StringReader( srcDocument ) );
// queryを使って検索する



Analyzerを指定できるので、やろうと思えば類義語展開/正規化もできる。これにより適切な関連文書を提示できる。
| 関口宏司 | その他のOSS検索エンジン | 23:42 | comments(5) | trackbacks(1) |
スポンサーサイト
| スポンサードリンク | - | 23:42 | - | - |
いつも、お世話になっています。
このmorelikethisの機能を使いたいと思っています。現在のluceneバージョンは2.3.2です。
しかし、importして使いたいのですが、jarファイルからmorelikethisを探そうとしても存在しません。
どのようにmorelikethisを使えばよろしいでしょうか?
バージョンによって提供されてないケースもございますか?
| taka | 2008/10/04 5:41 PM |
./contrib/queries/ の下を探してください。
| 関口 | 2008/10/04 6:44 PM |
質問です。
擬似コードのdirとはこのようなものでよいのでしょうか?
String index = "C:¥¥Lucene¥¥index";
Directory dir = new RAMDirectory(new File(index));

現在検索がうまくいかず苦労しています。

下記のように書きました。
http://d.hatena.ne.jp/snkken/20090620
| snkken | 2009/06/21 12:25 AM |
dirはDirectoryオブジェクトのことですので、上のとおりでOKです。
| 関口 | 2009/06/21 8:46 AM |
>関口さん
ありがとうございます。
他の原因を突き止めることができました
| snkken | 2009/06/23 9:12 PM |









トラックバック機能は終了しました。
Suffix Arrayを用いた一致領域取得スクリプト
javascriptだけで動きます。 以前作ったやつをもう一回見直しました。 diffコマンドみたいに、行レベルで差分を調べるわけではありません。 文字レベルで一致をみます 順序前後なんかは全く関係ありません。 コードはおそらく最適なものではありま
| 研究開発 | 2008/07/10 2:11 PM |
+ Solrによるブログ内検索
+ PROFILE
     12
3456789
10111213141516
17181920212223
24252627282930
31      
<< March 2024 >>
+ LINKS
検索エンジン製品 - 比較のポイント
商用検索エンジンを購入した企業担当者は読まないでください。ショックを受けますから・・・
>>製品比較 10のポイント
+ Lucene&Solrデモ
+ ThinkIT記事
+ RECOMMEND
Apache Solr入門 ―オープンソース全文検索エンジン
Apache Solr入門 ―オープンソース全文検索エンジン (JUGEMレビュー »)
関口 宏司,三部 靖夫,武田 光平,中野 猛,大谷 純
+ RECOMMEND
Lucene in Action
Lucene in Action (JUGEMレビュー »)
Erik Hatcher,Otis Gospodnetic,Mike McCandless
FastVectorHighlighterについて解説記事を寄稿しました。
+ RECOMMEND
+ SELECTED ENTRIES
+ RECENT COMMENTS
+ RECENT TRACKBACK
+ CATEGORIES
+ ARCHIVES
+ MOBILE
qrcode
+ SPONSORED LINKS