我假设您已经运行 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 仅对以 a 结尾的术语使用模糊搜索~
。发现了这个和一些更有用的信息http://scatteredcode.wordpress.com/2011/05/26/performing-a-fuzzy-search-with-multiple-terms-through-multiple-lucene-net-document-fields/ http://scatteredcode.wordpress.com/2011/05/26/performing-a-fuzzy-search-with-multiple-terms-through-multiple-lucene-net-document-fields/.