查询下面的弹性搜索不会返回任何结果:
1。){"query":{"regexp":{"field_name":".*f04((?!z).)*"}}
为什么上述查询不会返回任何结果?
我期望这样的结果:
['f00bar', 'f04bar', 'f04barbuh', 'f04ba']
以下一项返回:
2。){"query":{"regexp":{"field_name":".*f04((?!z).)*.*"}}
由此返回的结果:['f04bar', 'f04barbuh', 'f04ba', 'f04baz']
我知道第二个查询最后会因为。*而返回结果,正则表达式中的'!'
有什么问题,应该是其他问题吗?我们如何使用!
作为regexp的一部分来指定ba
,而不要紧跟z
。
答案 0 :(得分:0)
regexp
查询针对包含基础数据分析版本的索引运行。默认情况下,使用standard
分析器将文本拆分为单词(仅字母数字),删除所有其他内容(此处是!
将被删除的位置),然后将所有内容都小写。
要确切了解正在发生的事情,可以使用_analyze
API,修改该过程,或者将该字段映射为keyword
或指定其他analyzer
。