我正在尝试在Kibana中的弹性搜索查询中进行多个通配符查询匹配。我无法弄明白。
基本上我想要任何属性类型=“erreur”
的文档我想在字段descr_courte
上排除与字符串“An established *”或“java.lang。*”匹配的所有文档{
"query": {
"bool": {
"must": {
"term": {
"type": "erreur"
}
},
"must_not": {
"wildcard": {
"descr_courte": ["An established*", "java.lang.*"]
}
}
}
}
}
如果我放一个通配符查询就可以了。
{
"query": {
"bool": {
"must": {
"term": {
"type": "erreur"
}
},
"must_not": {
"wildcard": {
"descr_courte":
"An established*"
}
}
}
}
}
我得到的错误:
错误:对Elasticsearch的请求失败:{“error”:{“root_cause”:[{“type”:“illegal_state_exception”,“reason”:“无法在1:454的START_ARRAY上获取文字”}] ,“type”:“search_phase_execution_exception”,“reason”:“所有分片 有什么想法吗?
答案 0 :(得分:3)
尝试将它们作为单独的条款。
{
"query": {
"bool": {
"must": {
"term": {
"type": "erreur"
},
"must_not": [
{
"wildcard": {
"descr_courte": "An established*"
}
},
{
"wildcard": {
"descr_courte": "java.lang.*"
}
}
]
}
}
}
}
答案 1 :(得分:1)
我的猜测是你不能为像["An established*", "java.lang.*"]
这样的通配符查询创建一个数组,所以你需要:
{
"query": {
"{
"must": {
"term": {
"type": "erreur"
}
},
"must_not": {
"regexp": {
"descr_courte": "(An established|java\.lang\.).*"
}
}
}
}
}
有关https://www.elastic.co/guide/en/elasticsearch/reference/5.1/query-dsl-regexp-query.html
中的regexp查询的详细信息另一种选择是将查询字词与查询字符串中的逻辑运算符NOT
,AND
和OR
结合使用
{
"query": {
"query_string" : {
"query" : "type:erreur AND NOT(descr_courte:An established* OR descr_courte:java.lang.*)"
}
}
}
查看更多信息