首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用lucene实现模糊搜索

用lucene实现模糊搜索
EN

Stack Overflow用户
提问于 2013-07-19 20:49:25
回答 1查看 15.3K关注 0票数 8

我用lucene 4.3.1实现了一个模糊搜索,但我对结果不满意。我想指定一些它应该返回的结果。例如,如果我想要10个结果,它应该返回10个最佳匹配,无论它们有多糟糕。大多数情况下,如果我搜索的单词与索引中的任何单词都非常不同,它就不会返回任何内容。如何才能获得更多/更模糊的结果?

下面是我的代码:

代码语言:javascript
运行
复制
    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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-20 00:01:02

在Lucene 4.x中,FuzzyQuery不再支持大的编辑距离。目前的FuzzyQuery实现是在性能上的巨大改进,相比于Lucene3.x实现,但只支持两个编辑。超过2个Damerau-Levenshtein编辑的距离被认为很少是真正有用的。

根据FuzzyQuery documentation的说法,如果你真的需要更高的编辑距离:

如果您真的想要这样做,请考虑使用n元语法索引技术(例如

模块中的SpellChecker )。

强烈的暗示是,你应该重新考虑你试图实现的目标,并找到一种更有用的方法。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17746476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档