包含“!”的弹性搜索查询正则表达式查询中的结果与任何结果都不匹配

时间:2018-08-08 01:21:24

标签: regex elasticsearch elasticsearch-dsl elasticsearch-dsl-py

查询下面的弹性搜索不会返回任何结果:

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

1 个答案:

答案 0 :(得分:0)

regexp查询针对包含基础数据分析版本的索引运行。默认情况下,使用standard分析器将文本拆分为单词(仅字母数字),删除所有其他内容(此处是!将被删除的位置),然后将所有内容都小写。

要确切了解正在发生的事情,可以使用_analyze API,修改该过程,或者将该字段映射为keyword或指定其他analyzer