整个字段上的Azure搜索过滤器

时间:2019-10-08 21:44:38

标签: azure azure-cognitive-search

我一直在尝试创建一个匹配整个字段文本结尾的过滤器。 例如,采用文本为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分析器,但随后我将失去正常搜索时使用的标记法。

1 个答案:

答案 0 :(得分:1)

一种可能的解决方案是在索引中定义第二个字段,其值与“ MyField”相同,但使用不同的分析器(例如keyword_v2)。这样,您仍然可以在原始字段上进行搜索,而在其他字段上进行过滤。

无论如何,您可能为了示例而简化了过滤器,但否则,当不通过'or'与另一个过滤器子句组合使用search.ismatchscoring()似乎是多余的–可以使用{{1} }参数。 此外,正则表达式可能无法正常工作,因为search的默认 queryType 简单,而不是完整-please see docs here < / p>