整个领域的 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() 的默认 queryTypesimple,而不是 full - please see docs here