有没有人知道如何确保我们可以通过Azure搜索过滤器返回正常结果以及重音结果集。例如,当我检查名为unicorn的记录时,Azure搜索中的below filter查询返回名为unicorn的名称。
var result= searchServiceClient.Documents.SearchAsync<myDto>("*",new SearchParameters
{
SearchFields = new List<string> {"Name"},
Filter = "Name eq 'unicorn'"
});
这一切都很好,但我想要的是,我想写一个过滤器,使其返回名为unicorn的记录以及名为únicorn的记录(请注意第一个重音字符),前提是这两个记录都存在。
这可以通过使用语言或标准ASCII折叠搜索分析器的搜索查询来搜索这样的名称时实现,如在此link中提到的。我正在努力寻找的是,我们如何才能实现相同的Azure过滤器?
请让我知道,如果有人有任何解决办法。
2条答案
按热度按时间dw1jzc5e1#
过滤器应用在数据的非分析表示上,所以我不认为有任何方法可以对过滤器进行任何类型的语言分析。解决这个问题的一种方法是手动创建一个字段,该字段只进行小写+ asciifloding(没有标记化),然后搜索lucene查询,如下所示:
基本上,文档既需要匹配任何字段中的搜索词,也需要匹配“customFilterColumn”中的筛选词。这可能不足以满足您的需要,但至少您了解了可能的艺术。
7ivaypg92#
使用过滤器它不会工作,除非你事先指定所有的可能性:
例如:
$filter=name eq 'unicorn' or name eq 'únicorn'
你最好使用一个不同的分析器,它会将重音改变为它的根形式。作为另一种可能性,你可以尝试模糊搜索: