0

Lucene の Highlighter を使用して、文字列の一部を強調表示しています。以下のコードは、単語の語幹を見つけるには問題なく機能するようですが、プレフィックス マッチングには機能しません。

EnglishAnalyzer analyzer = new EnglishAnalyzer(Version.LUCENE_34);
QueryParser parser = new QueryParser(Version.LUCENE_30, "", analyzer);
Query query = parser.parse(pQuery);

QueryScorer scorer = new QueryScorer(query);
Fragmenter fragmenter = new SimpleSpanFragmenter(scorer, 40);

Highlighter highlighter = new Highlighter(scorer);
highlighter.setTextFragmenter(fragmenter);

String[] frags = highlighter.getBestFragments(analyzer, "", pText, 4);

接頭辞の一致を機能させるために Query.rewrite を呼び出す必要があるいくつかの異なる場所を読みました。ただし、そのメソッドは IndexReader 引数を受け取りますが、それを取得する方法がわかりません。呼び出し Query.rewreite が IndexReader がどこから来たのかを示していないことがわかったすべての例。これが私が使用している唯一の Lucene コードであることを付け加えておきます。強調表示のためだけに、Lucene を使用して検索自体を行っているわけではありません。

IndexReader を作成するにはどうすればよいですか? また、私のように Lucene を使用している場合に作成することは可能ですか? または、接頭辞の一致を強調表示する別の方法があるのでしょうか? 私は Lucene に非常に慣れていないので、これらのすべての部分が何をするのか、またはそれらがすべて必要なのかを確信しています。オンラインで見つけたさまざまな例からそれらをコピーしました。だから私が他に何か間違ったことをしているなら、私に知らせてください。ありがとう。

4

1 に答える 1

0

クエリがあるとしますfield:abc*。基本的に行うことquery.rewriteは次のとおりです。インデックスを読み取ります(これがIndexReaderが必要な理由です)で始まるすべての用語を見つけabc、クエリを次のように変更します field:abc1 field:abc2 field:abc3。インデックスの場所がわかっている場合は、 を使用IndexReader.Openして IndexReader を取得できます。インデックスがまったくない場合は、 を検索し、pTextで始まるすべての単語を見つけて、abcそれに応じてクエリを更新する必要があります。

于 2011-11-11T16:37:40.750 に答える