我用lucene 4.3.1实现了一个模糊搜索,但我对结果不满意。我想指定一些它应该返回的结果。例如,如果我想要10个结果,它应该返回10个最佳匹配,无论它们有多糟糕。大多数情况下,如果我搜索的单词与索引中的任何单词都非常不同,它就不会返回任何内容。如何才能获得更多/更模糊的结果?
下面是我的代码:
public String[] luceneQuery(String query, int numberOfHits, String path)
throws ParseException, IOException {
File dir = new File(path);
Directory index = FSDirectory.open(dir);
query = query + "~";
Query q = new QueryParser(Version.LUCENE_43, "label", analyzer)
.parse(query);
IndexReader reader = DirectoryReader.open(index);
IndexSearcher searcher = new IndexSearcher(reader);
Query fuzzyQuery = new FuzzyQuery(new Term("label", query), 2);
ScoreDoc[] fuzzyHits = searcher.search(fuzzyQuery, numberOfHits).scoreDocs;
String[] fuzzyResults = new String[fuzzyHits.length];
for (int i = 0; i < fuzzyHits.length; ++i) {
int docId = fuzzyHits[i].doc;
Document d = searcher.doc(docId);
fuzzyResults[i] = d.get("label");
}
reader.close();
return fuzzyResults;
}
发布于 2013-07-19 16:01:02
在Lucene 4.x中,FuzzyQuery
不再支持大的编辑距离。目前的FuzzyQuery
实现是在性能上的巨大改进,相比于Lucene3.x实现,但只支持两个编辑。超过2个Damerau-Levenshtein编辑的距离被认为很少是真正有用的。
根据FuzzyQuery
documentation的说法,如果你真的需要更高的编辑距离:
如果您真的想要这样做,请考虑使用n元语法索引技术(例如
模块中的SpellChecker )。
强烈的暗示是,你应该重新考虑你试图实现的目标,并找到一种更有用的方法。
https://stackoverflow.com/questions/17746476
复制相似问题