将 Lucene 与 Azure Search .NET SDK 结合使用进行模糊搜索

Fuzzy search using Lucene with Azure Search .NET SDK

我正在尝试使用 Azure Search .NET API 将模糊搜索与部分搜索和匹配提升相结合。

这是我目前拥有的,还没有用:

// Create SearchIndexClient
searchIndexClient= new SearchIndexClient("searchServiceName", "indexName", [credentials]);
// Set search params
var searchParameters = new SearchParameters(
                includeTotalResultCount: true,
                queryType: QueryType.Full);
// Set search string
string searchText = "elise*~^10";
// perform search.
var result = searchIndexClient.Documents.SearchAsync(searchText, searchParameters);

该索引中有一个条目,其名称为 属性,值为 'Elyse'。使用上述代码找不到此条目。如果我将 searchText 更改为 "elyse~",则该条目会返回。

我也无法在 Azure 门户网站搜索浏览器中使用它(那个东西有名字吗?)。

我在这里错过了什么? 我认为这可能是转义的问题,但我不确定如何解决。 我查看了有关该主题的大量文档和 Stack Overflow 问题,但 none 显示了有关如何使用 .NET SDK 进行模糊搜索调用的完整答案。所以请尽可能以完整代码的形式回复。 非常感谢。

我还没有编译你的应用程序代码,但它看起来是正确的。这里的问题是通配符查询不适用于模糊运算符,正如您期望的那样。

documentation 中有一条注释说:

You cannot use a * or ? symbol as the first character of a search. No text analysis is performed on wildcard search queries. At query time, wildcard query terms are compared against analyzed terms in the search index and expanded.

这意味着在通配符后指定模糊运算符没有任何影响,结果与不应用它是一样的。在您的示例中,elise*~^10 实际上是 elise*^10,因此不匹配 "elyse"。

在查询中表达这一点的一种方法是使用 OR 运算符。 elise~^10 OR elise*^10。由于第一个子句,这将 return 包含 "elyse" 的文档。