我一直在尝试创建一个匹配整个字段文本结尾的过滤器。
例如,采用文本为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
分析器,但随后我将失去正常搜索时使用的标记法。
答案 0 :(得分:1)
一种可能的解决方案是在索引中定义第二个字段,其值与“ MyField”相同,但使用不同的分析器(例如keyword_v2
)。这样,您仍然可以在原始字段上进行搜索,而在其他字段上进行过滤。
无论如何,您可能为了示例而简化了过滤器,但否则,当不通过'or'与另一个过滤器子句组合使用search.ismatchscoring()
似乎是多余的–可以使用{{1} }参数。
此外,正则表达式可能无法正常工作,因为search
的默认 queryType 是简单,而不是完整-please see docs here < / p>