我正在尝试通过Azure搜索.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 Web门户搜索浏览器中使用它(这个东西有名称吗?)。
我在这里想念什么?我认为转义可能是一个问题,但我不确定如何解决。我查看了有关该主题的大量文档和Stack Overflow问题,但没有一个给出有关如何使用.NET SDK进行模糊搜索调用的完整答案。因此,请尽可能以完整代码的形式答复。提前非常感谢。
我尚未编译您的应用程序代码,但看起来正确。这里的问题是通配符查询不能与模糊运算符一起使用,因为您希望它在这里起作用。
documentation中有一个注释:
您不能使用*或?符号作为搜索的第一个字符。 没有对通配符搜索查询执行文本分析。在查询时,将通配符查询词与搜索中的分析词进行比较索引并展开。
这意味着在通配符后指定模糊运算符不会产生任何影响,其结果与不应用它相同。在您的示例中,elise*~^10
实际上是elise*^10
,因此与“ elyse”不匹配。
一种在查询中表达这一点的方法是使用OR运算符。 elise~^10 OR elise*^10
。由于第一个子句,这将返回包含“ elyse”的文档。