用lucene进行模糊搜索

tad*_*ada 6 lucene full-text-search fuzzy-search

我用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;
}
Run Code Online (Sandbox Code Playgroud)

fem*_*gon 5

FuzzyQueryLucene 4.x 不再支持较大的编辑距离。当前的实现比Lucene 3.x实现在性能上FuzzyQuery有了巨大的提高,但仅支持两次编辑。大于2的Damerau–Levenshtein编辑距离实际上很少有用。

根据FuzzyQuery文档,如果您确实必须具有更高的编辑距离:

如果您确实需要这样做,请考虑使用n元语法索引技术(例如,suggest模块中的SpellChecker)。

强烈的暗示是,您应该重新考虑要完成的工作,并找到更有用的方法。