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

问题描述 投票:0回答:1

我正在尝试通过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进行模糊搜索调用的完整答案。因此,请尽可能以完整代码的形式答复。提前非常感谢。

c# lucene azure-cognitive-search fuzzy-search azure-search-.net-sdk
1个回答
0
投票

我尚未编译您的应用程序代码,但看起来正确。这里的问题是通配符查询不能与模糊运算符一起使用,因为您希望它在这里起作用。

documentation中有一个注释:

您不能使用*或?符号作为搜索的第一个字符。 没有对通配符搜索查询执行文本分析。在查询时,将通配符查询词与搜索中的分析词进行比较索引并展开。

这意味着在通配符后指定模糊运算符不会产生任何影响,其结果与不应用它相同。在您的示例中,elise*~^10实际上是elise*^10,因此与“ elyse”不匹配。

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

© www.soinside.com 2019 - 2024. All rights reserved.