将 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" 的文档。
我正在尝试使用 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" 的文档。