0

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

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.

4

1 回答 1

0

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

要准确查看正在发生的事情,您可以使用_analyzeAPI 来修改该过程,或者将该字段映射为keyword或指定不同的analyzer.

于 2018-08-08T20:43:22.603 回答