2

Luceneでヒットとして返された特定のドキュメントと一致するクエリ内の用語を見つけるための最良の方法は何ですか?

lucene contribのヒットハイライトパッケージを含む奇妙な方法と、クエリ内のすべての単語を最上位のドキュメントに対して検索する方法( "docId:xy AND description:each_word_in_query")を試しました。

満足のいく結果が得られませんか?ヒットの強調表示は、最初のドキュメント以外のドキュメントに一致した単語の一部を報告しません。2番目のアプローチが最良の選択肢であるかどうかはわかりません。

4

2 に答える 2

2

サーチャーで説明するメソッドは、クエリのどの部分が一致し、それが全体のスコアにどのように影響するかを確認するための優れた方法です。

Lucene In Action 2nd Editionの本からの例:

public class Explainer {

  public static void main(String[] args) throws Exception {

     if (args.length != 2) {
        System.err.println("Usage: Explainer <index dir> <query>");
        System.exit(1);
     }

     String indexDir = args[0];
     String queryExpression = args[1];
     Directory directory = FSDirectory.open(new File(indexDir));
     QueryParser parser = new QueryParser(Version.LUCENE_CURRENT,
                                     "contents", new SimpleAnalyzer());

     Query query = parser.parse(queryExpression);
     System.out.println("Query: " + queryExpression);
     IndexSearcher searcher = new IndexSearcher(directory);
     TopDocs topDocs = searcher.search(query, 10);
     for (int i = 0; i < topDocs.totalHits; i++) {
        ScoreDoc match = topDocs.scoreDocs[i];
        Explanation explanation = searcher.explain(query, match.doc);   
        System.out.println("----------");
        Document doc = searcher.doc(match.doc);
        System.out.println(doc.get("title"));
        System.out.println(explanation.toString());
     }
  }
}

これにより、クエリに一致する各ドキュメントのスコアが説明されます。

于 2010-05-17T18:10:13.633 に答える
0

まだ試していませんが、org.apache.lucene.search.highlight.QueryTermExtractorの実装を見てください。

于 2012-06-14T20:10:41.447 に答える