Lucene.net模糊短语搜索

时间:2010-10-29 16:08:14

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

我已经在相当长的一段时间内尝试了这一点并且在网络周围无处可寻 - 但是无法通过Lucene.NET 2.9.2找到任何模糊短语搜索的例子。 (C#)

是否有能力建议如何详细说明和/或提供一些示例代码 - 我会非常认真地感谢任何帮助,因为我完全陷入困境?

1 个答案:

答案 0 :(得分:2)

我假设您已经运行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/