lucene在查询中获得匹配的术语 [英] lucene get matched terms in query

查看:100
本文介绍了lucene在查询中获得匹配的术语的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

查找查询中哪些字词与作为lucene中的匹配项返回的给定文档匹配的最佳方法是什么?

What is the best way to find out which terms in a query matched against a given document returned as a hit in lucene?

我尝试了一种奇怪的方法点击lucene contrib中的突出显示包,以及一个搜索查询中最顶层文档的每个单词的方法(docId:xy AND description:each_word_in_query)。

I have tried a weird method involving hit highlighting package in lucene contrib and also a method that searches for every word in the query against the top most document ("docId: xy AND description: each_word_in_query").

没有得到满意的结果?
点击突出显示不会报告与第一个文档以外的文档匹配的一些单词。
我不确定第二种方法是否是最佳选择。

Do not get satisfactory results? Hit highlighting does not report some of the words that matched for a document other than the first one. I'm not sure if the second approach is the best alternative.

推荐答案

方法解释是查看查询的哪一部分匹配以及它如何影响总体分数的好方法。

The method explain in the Searcher is a nice way to see which part of a query was matched and how it affects the overall score.

取自的示例Lucene In Action第二版:

Example taken from the book 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());
     }
  }
}

这将解释得分每个与查询匹配的文档。

This will explain the score of each document that matches the query.

这篇关于lucene在查询中获得匹配的术语的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆