整个领域的 Azure 搜索筛选器
Azure Search filter on the whole field
我一直在尝试创建一个匹配整个字段文本末尾的过滤器。
例如,使用文本字段:the brown fox jumped over the lazy dog
我希望它与搜索值以 g 结尾的字段的查询相匹配。类似于:
{
"search":"*",
"queryType":"full",
"searchMode": "any",
...
"filter":"search.ismatchscoring('/g$/','MyField')"
}
结果仅是记录,其中 MyField 包含由字符串任意位置的单个 g 字符组成的单词的值。
直接使用过滤器也没有结果:
{
"search":"*",
"queryType":"full",
"searchMode": "any",
...
"filter":"MyField eq '*g'"
}
据我所知,标记化始终是搜索和过滤的基础,这意味着在上述查询中,$ 被完全忽略,匹配项将按单词,而不是按字段。
也许我可以在这个字段上使用 keyword_v2
分析器,但是我会丢失正常搜索时使用的 tokenizarion。
一种可能的解决方案是在您的索引中定义第二个字段,其值与“MyField”相同,但使用不同的分析器(例如 keyword_v2
)。这样,您仍然可以在过滤其他字段的同时搜索原始字段。
无论如何,为了示例的缘故,您可能已经简化了过滤器,但除此之外,当不通过“或”与另一个过滤器子句组合时,使用 search.ismatchscoring()
似乎是多余的——可以使用 search
直接参数。
此外,正则表达式可能无法正常工作,因为 search.ismatchscoring()
的默认 queryType 是 simple,而不是 full - please see docs here
我一直在尝试创建一个匹配整个字段文本末尾的过滤器。
例如,使用文本字段:the brown fox jumped over the lazy dog
我希望它与搜索值以 g 结尾的字段的查询相匹配。类似于:
{
"search":"*",
"queryType":"full",
"searchMode": "any",
...
"filter":"search.ismatchscoring('/g$/','MyField')"
}
结果仅是记录,其中 MyField 包含由字符串任意位置的单个 g 字符组成的单词的值。
直接使用过滤器也没有结果:
{
"search":"*",
"queryType":"full",
"searchMode": "any",
...
"filter":"MyField eq '*g'"
}
据我所知,标记化始终是搜索和过滤的基础,这意味着在上述查询中,$ 被完全忽略,匹配项将按单词,而不是按字段。
也许我可以在这个字段上使用 keyword_v2
分析器,但是我会丢失正常搜索时使用的 tokenizarion。
一种可能的解决方案是在您的索引中定义第二个字段,其值与“MyField”相同,但使用不同的分析器(例如 keyword_v2
)。这样,您仍然可以在过滤其他字段的同时搜索原始字段。
无论如何,为了示例的缘故,您可能已经简化了过滤器,但除此之外,当不通过“或”与另一个过滤器子句组合时,使用 search.ismatchscoring()
似乎是多余的——可以使用 search
直接参数。
此外,正则表达式可能无法正常工作,因为 search.ismatchscoring()
的默认 queryType 是 simple,而不是 full - please see docs here