2011-08-08 9 views
-1

を使用して、2つの用語を検索私は自分のプロジェクトに次のコードを書かれている:トラブルluceneの

final IndexSearcher indexSearcher = new IndexSearcher(INDEXING_DIRECTORY, true); 
final Query query = new QueryParser(Version.LUCENE_33, "keywords", new StandardAnalyzer(Version.LUCENE_33)).parse("cats movies"); 
final TopScoreDocCollector collector = TopScoreDocCollector.create(10, true); 
indexSearcher.search(query, collector); 
final ScoreDoc[] hits = collector.topDocs(0, 10).scoreDocs; 

タスクは非常に簡単です。

たとえば、索引付けされた「キーワード」フィールドを持つレコードが格納されています。たとえば、キーワードは「おもしろい猫の映画のトン」と似ているかもしれません。

問題は、検索クエリが「面白い猫」(索引付けされたフィールドのような語順)であればレコードを返しますが、「猫の映画」では失敗します。どのようにして質問を書くべきなので、どんな言葉の順番にも一致するでしょうし、同様の単語を検索することも可能でしょうか?

+4

タイトルにご質問ください。 – Zeemee

+1

なぜすべてのdownvotes?正当な質問ですか? – snowflakekiller

+0

「フレーズ」という単語を「2つの単語」に置き換えました。フレーズは、オペレーションが検索したいことではありません。 – fyr

答えて

1

おそらく「cats movies」は、PhraseQueryとして解析されます。 PhraseQueriesは注文を尊重します。あなたが望むのはBooleanQueryの2つのTermQueriesANDを組み合わせたものです。

final Query query = new QueryParser(Version.LUCENE_33, "keywords", new StandardAnalyzer(Version.LUCENE_33)).parse("+cats AND +movies"); 

さらに多くの例がhereと記載されています。いくつかはすでに古くなっている可能性があります。

類似の単語は、類義語を並べる単語リストやデータベースを少なくともいくつか用意する必要があるため、かなり難しい作業です。

+0

ありがとうございます。私は家でそれを試してみる:) –