我在我的网站上使用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ói
,thầu
或số
。
我的查询方式:
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();
}
}
}
答案 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有用。