Lucene получить соответствующие термины в запросе - PullRequest
2 голосов
/ 17 мая 2010

Каков наилучший способ выяснить, какие термины в запросе сопоставлены с данным документом, возвращенным как результат в lucene?

Я попробовал странный метод, включающий пакет выделения совпадений в lucene contrib, а также метод, который ищет каждое слово в запросе по самому верхнему документу ("docId: xy AND description: each_word_in_query").

Не получите удовлетворительных результатов? Подсветка попаданий не сообщает о некоторых словах, которые соответствуют документу, отличному от первого. Я не уверен, что второй подход - лучшая альтернатива.

Ответы [ 2 ]

2 голосов
/ 17 мая 2010

Метод объяснение в Поиске - это хороший способ узнать, какая часть запроса была сопоставлена ​​и как она влияет на общую оценку.

Пример взят из книги 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());
     }
  }
}

Это объяснит оценку каждого документа, который соответствует запросу.

0 голосов
/ 15 июня 2012

Пока не пробовал, но взгляните на реализацию org.apache.lucene.search.highlight.QueryTermExtractor.

...