【问题标题】:Fuzzy search using Lucene with Azure Search .NET SDK使用 Lucene 和 Azure Search .NET SDK 进行模糊搜索
【发布时间】:2020-06-25 05:20:51
【问题描述】:

我正在尝试结合使用模糊搜索与部分搜索和匹配提升,使用 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 门户网站搜索资源管理器中使用它(那个东西有名字吗?)。

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

【问题讨论】:

    标签: c# lucene azure-cognitive-search fuzzy-search azure-search-.net-sdk


    【解决方案1】:

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

    documentation 中有一条注释说:

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

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

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

    【讨论】:

    • 感谢您的回答,即使是在我发布问题几天后。我们决定在代码中使用构建部分和模糊搜索,而不使用 Azure 认知搜索的功能。这样我们可以结合部分搜索和模糊搜索,并且我们有更多的控制权。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-04
    • 2014-06-11
    • 2016-11-20
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多