【问题标题】:Lucene.net Fuzzy Phrase SearchLucene.net 模糊短语搜索
【发布时间】:2011-05-02 12:12:39
【问题描述】:

我自己已经尝试了相当长的一段时间,并在网上到处寻找 - 但无法找到任何通过 Lucene.NET 2.9.2 进行模糊短语搜索的示例。 (C#)

是否能够详细建议如何执行此操作和/或提供一些示例代码 - 我会非常感谢任何帮助,因为我完全陷入困境?

【问题讨论】:

标签: lucene.net fuzzy-search lucene fuzzy-comparison


【解决方案1】:

我假设您运行 Lucene 并创建了一个搜索索引,其中包含一些字段。所以让我们进一步假设:

var fields = ... // a string[] of the field names you wish to search in
var version = Version.LUCENE_29; // your Lucene version
var queryString = "some string to search for";

一旦您拥有所有这些,您就可以继续在多个字段上定义搜索查询,如下所示:

var analyzer = LuceneIndexProvider.CreateAnalyzer();
var query = new MultiFieldQueryParser(version, fields, analyzer).Parse(queryString);

也许您已经做到了这一点,只是缺少模糊的部分。我只是在queryString 中的每个单词上添加一个波浪号~ 来告诉Lucene 对queryString 中的所有单词进行模糊搜索:

if (fuzzy && !string.IsNullOrEmpty(queryString)) {
    // first escape the queryString so that e.g. ~ will be escaped
    queryString = QueryParser.Escape(queryString);
    // now split, add ~ and join the queryString back together
    queryString = string.Join("~ ",
        queryString.Split(' ', StringSplitOptions.RemoveEmptyEntries)) + "~";
    // now queryString will be "some~ string~ to~ search~ for~"
}

这里的关键点是 Lucene 仅对以 ~ 结尾的术语使用模糊搜索。这和一些更有用的信息被发现在 http://scatteredcode.wordpress.com/2011/05/26/performing-a-fuzzy-search-with-multiple-terms-through-multiple-lucene-net-document-fields/.

【讨论】:

    猜你喜欢
    • 2015-12-16
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多