0

我们正在使用 .net 库进行 azure 搜索,我已成功构建索引并将数据存储在索引中。我们的一个字段称为标签,它是字符串的集合,它被标记为可搜索。因此,我们将值放在此字段中,例如 C# .NET。

问题是当搜索搜索服务时不会在 C# 上命中,它会在 C 上,也不会在 .NET 上命中,但会在 NET 上。我可以通过 fiddler 看到搜索词正在编码 # 和 .,但它似乎并没有在 azure 端被解码。

4

3 回答 3

3

你看到的行为是 Azure 搜索使用的标准分析器执行的结果标记化。默认情况下,它会在许多标点符号(如 # 和 . (您可以在此处获取 Azure 搜索中文本分析的所有详细信息)。

我们正在考虑添加对自定义分析器的支持,这些分析器可以让您排除 # 和 . 从断语开始,但这仍处于计划阶段。同时,作为一种解决方法,我们建议在索引和查询之前在您的应用程序中对这些字符进行编码(例如——C# -> CSharp、.NET -> dotNET)。

于 2015-06-02T23:41:11.287 回答
1

谢谢布鲁斯,现在我刚刚在我们的搜索实现中创建了一个函数,它可以从最终用户提供的搜索词中删除标点符号。这样我就不必遍历并更新所有搜索索引/记录。

    private string SanitizeValue(string value)
    {
        return Regex.Replace(value, @"[^a-zA-Z0-9\s]", "");
    }
于 2015-06-03T12:43:51.370 回答
0

您可以尝试使用正则表达式搜索,例如搜索此字符串:/.*c\#.*/。还要确保你设置了SearchParameters.QueryType = QueryType.Full.

于 2019-05-31T11:06:14.473 回答