我们正在使用.net库进行azure搜索,我已经成功地构建了索引并将数据存储在索引中。我们的其中一个字段称为标记,它是字符串的集合,并被标记为可搜索。因此,我们将值放在此字段中,例如C# .NET。
问题是,当搜索服务不会命中C#时,它会命中C语言,也不会命中.NET,但会命中网络。我可以通过fiddler看到搜索词正在对#和.进行编码,但它似乎并没有在azure端被解码。
发布于 2015-06-03 07:41:11
您看到的行为是Azure Search使用的标准分析器执行的结果标记化。默认情况下,它会在许多标点符号上断开,如#和。(你可以在Azure Search here中获得文本分析的所有细节)。
我们正在考虑添加对custom analyzers的支持,这将允许您排除#和等字符。从单词破碎,但这仍然是在规划阶段。同时,作为解决办法,我们建议在索引和查询之前在应用程序中对这些字符进行编码(例如-- C# -> CSharp,.NET -> dotNET)。
发布于 2015-06-03 20:43:51
谢谢Bruce,现在我已经在我们的搜索实现中创建了一个函数,它可以从最终用户提供的搜索词中删除标点符号。这样我就不需要遍历和更新所有的搜索索引/记录。
private string SanitizeValue(string value)
{
return Regex.Replace(value, @"[^a-zA-Z0-9\s]", "");
}发布于 2019-05-31 19:06:14
你可以尝试使用正则表达式搜索,比如搜索这个字符串:/.*c\#.*/。还要确保设置了SearchParameters.QueryType = QueryType.Full。
https://stackoverflow.com/questions/30605384
复制相似问题