按lucene这个词的距离排序

时间:2015-01-22 03:02:16

标签: java lucene

我在我的网站上使用Lucene 2.9.4。 在网站上有一个简单的输入文本供用户输入文字和搜索。

示例:

当输入为Gói thầu số 15时,query.toString()调用将返回:(BID_NM:gói BID_NM:thầu BID_NM:số BID_NM:15)

我收到的结果是错误的订单。它不是找Gói thầu số 15,而是单独找到单词,即。最佳结果为góithầusố

我的查询方式:

public static Query getQuery(String keyword) throws ParseException{
    try{
        return MultiFieldQueryParser.parse(Version.LUCENE_29, new     String  []{keyword}, new String[]{"NAME"}, new StandardAnalyzer(Version.LUCENE_29));
    }catch(ParseException e){
        keyword=MultiFieldQueryParser.escape(keyword);
        return MultiFieldQueryParser.parse(Version.LUCENE_29, new String[]{keyword}, new String[]{"NAME"}, new StandardAnalyzer(Version.LUCENE_29));
    }
}

搜索:

IndexReader reader=null;
Query query=null;
Filter filter=null;
try{
  reader = IndexReader.open(directory, true);    // Read only
  IndexSearcher searcher = new IndexSearcher(reader);
  query=getQuery(keyword);
  System.out.println(query.toString());
  TopDocs topDocs = searcher.search(query, null, 10000, Sort.RELEVANCE);
  ScoreDoc[] hits = topDocs.scoreDocs;
} catch (Exception exc) {
     exc.printStackTrace();
} finally {
      if (reader != null) {
        try {
               reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }

    }

}

1 个答案:

答案 0 :(得分:0)

可能你应该使用短语搜索。这里,例如关于主题http://www.avajava.com/tutorials/lessons/how-do-i-query-for-words-near-each-other-with-a-phrase-query.html

的可能教程之一

关键点是setSlop()的{​​{1}}方法,它允许在匹配的文档中指定查询中单词之间的最大距离。此外,如果您的文档需要在索引期间自动识别某些特定短语,您可能会发现以下tutorial有用。