2010-05-17 1 views
2

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

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

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

ответ

2

Метод explain в Searcher - отличный способ увидеть, какая часть запроса была сопоставлена ​​и как она влияет на общий балл.

Пример взят из книги Lucene в действии 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

Работает ли это с нечетким соответствием тоже. –

+0

Я хочу узнать термины в запросе, поэтому, если «собаки» совпадают с «собакой» в запросе. Я хочу определить, что это был термин «собака» в запросе, который соответствует. –

+0

не могли бы вы привести пример кода –

0

Не пробовал еще, но посмотрите на реализацию org.apache.lucene.search.highlight.QueryTermExtractor.