繁体   English   中英

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

[英]Fuzzy search using Lucene with Azure Search .NET SDK

我正在尝试使用 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”。 使用上述代码找不到此条目。 如果我将"elyse~"更改为"elyse~""elyse~"返回该条目。

我也无法在 Azure Web 门户搜索资源管理器中使用它(那个东西有名字吗?)。

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

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

文档中有一条注释说:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM