术语过滤" bool必须",不返回任何结果

时间:2018-04-12 00:41:03

标签: elasticsearch

我的查询在几十条记录中按预期执行。我们已经开始向我们的ES实例提供更多数据,现在我没有得到任何结果:

首先查询:

{
  "query": {
   "bool": {
      "must": [
        {
          "match": {
            "message": "new connection attempt failed: null"
           }
        }
      ] 
    }
  }
}

我收到了一些记录。这表明记录实际上是我期望的索引。

如果我从结果中选择一条记录:

 {
        "_index": "logstash-2018.04.12",
        "_type": "log",
        "_id": "AWK3J1xarbUl8ovcY8uv",
        "_score": 6.621839,
        "_source": {
          "cluster": "dev-east-1-c5",
          "offset": 35858135,
          "level": "ERROR",
         ...
      }
 然后添加一个术语过滤器以仅获取特定群集的条目,我什么也得不回(但只有当索引加载了超过几千条记录时)。

 {
   "query": {
     "bool": {
       "must": [
         {
           "match": {
            "message": "new connection attempt failed: null"
           }
         }
      ],
       "filter": [
       {
         "term": {
           "cluster": "dev-east-1-c5"
         }
         }
      ]
    }
 }
   }

用简单的英语描述我想要做的事情:

message - 匹配包含消息字符串的任何条目

然后过滤那些只返回clustername完全匹配的条目。

编辑4/12/18 - 按要求添加日志类型的映射

{  
   "logstash-2018.04.12":{  
      "mappings":{  
     "log":{  
        "_all":{  
           "enabled":true,
           "norms":false
        },
        "dynamic_templates":[  
           {  
              "message_field":{  
                 "path_match":"message",
                 "match_mapping_type":"string",
                 "mapping":{  
                    "norms":false,
                    "type":"text"
                 }
              }
           },
           {  
              "string_fields":{  
                 "match":"*",
                 "match_mapping_type":"string",
                 "mapping":{  
                    "fields":{  
                       "keyword":{  
                          "ignore_above":256,
                          "type":"keyword"
                       }
                    },
                    "norms":false,
                    "type":"text"
                 }
              }
           }
        ],
        "properties":{  
           "@timestamp":{  
              "type":"date",
              "include_in_all":false
           },
           "@version":{  
              "type":"keyword",
              "include_in_all":false
           },
           "application_name":{  
              "type":"text",
              "norms":false,
              "fields":{  
                 "keyword":{  
                    "type":"keyword",
                    "ignore_above":256
                 }
              }
           },
           "application_version":{  
              "type":"text",
              "norms":false,
              "fields":{  
                 "keyword":{  
                    "type":"keyword",
                    "ignore_above":256
                 }
              }
           },
           "beat":{  
              "properties":{  
                 "hostname":{  
                    "type":"text",
                    "norms":false,
                    "fields":{  
                       "keyword":{  
                          "type":"keyword",
                          "ignore_above":256
                       }
                    }
                 },
                 "name":{  
                    "type":"text",
                    "norms":false,
                    "fields":{  
                       "keyword":{  
                          "type":"keyword",
                          "ignore_above":256
                       }
                    }
                 },
                 "version":{  
                    "type":"text",
                    "norms":false,
                    "fields":{  
                       "keyword":{  
                          "type":"keyword",
                          "ignore_above":256
                       }
                    }
                 }
              }
           },
           "cluster":{  
              "type":"text",
              "norms":false,
              "fields":{  
                 "keyword":{  
                    "type":"keyword",
                    "ignore_above":256
                 }
              }
           },
           "geoip":{  
              "dynamic":"true",
              "properties":{  
                 "ip":{  
                    "type":"ip"
                 },
                 "latitude":{  
                    "type":"half_float"
                 },
                 "location":{  
                    "type":"geo_point"
                 },
                 "longitude":{  
                    "type":"half_float"
                 }
              }
           },
           "host":{  
              "type":"text",
              "norms":false,
              "fields":{  
                 "keyword":{  
                    "type":"keyword",
                    "ignore_above":256
                 }
              }
           },
           "input_type":{  
              "type":"text",
              "norms":false,
              "fields":{  
                 "keyword":{  
                    "type":"keyword",
                    "ignore_above":256
                 }
              }
           },
           "level":{  
              "type":"text",
              "norms":false,
              "fields":{  
                 "keyword":{  
                    "type":"keyword",
                    "ignore_above":256
                 }
              }
           },
           "level_value":{  
              "type":"long"
           },
           "logger_name":{  
              "type":"text",
              "norms":false,
              "fields":{  
                 "keyword":{  
                    "type":"keyword",
                    "ignore_above":256
                 }
              }
           },
           "message":{  
              "type":"text",
              "norms":false
           },
           "offset":{  
              "type":"long"
           },
           "source":{  
              "type":"text",
              "norms":false,
              "fields":{  
                 "keyword":{  
                    "type":"keyword",
                    "ignore_above":256
                 }
              }
           },
           "tags":{  
              "type":"text",
              "norms":false,
              "fields":{  
                 "keyword":{  
                    "type":"keyword",
                    "ignore_above":256
                 }
              }
           },
           "thread_name":{  
              "type":"text",
              "norms":false,
              "fields":{  
                 "keyword":{  
                    "type":"keyword",
                    "ignore_above":256
                 }
              }
           },
           "type":{  
              "type":"text",
              "norms":false,
              "fields":{  
                 "keyword":{  
                    "type":"keyword",
                    "ignore_above":256
                 }
                }
             }
          }
       }
    }
  }
}

1 个答案:

答案 0 :(得分:0)

有两个问题:

我的评论中提到了第一个问题。通过对普通"集群"进行术语过滤。而不是" cluster.keyword"一个分析仪正在调整一些东西,我没有得到完全匹配的命中。 (这似乎是2.x后的方法)

第二个问题是关于bool匹配的消息。匹配没有位置的概念,并且为大型数据集提供了各种意想不到的结果。修复是将bool匹配更改为bool match_phrase,然后根据更新过滤器。

似乎正在按我想要的方式工作。我有点担心可能有更高效的方法来做到这一点。我看到有些人正在使用通配符,我相信这是一个小小的进步。不确定是否有一种我不知道的古茹方法。