首页 > 解决方案 > Elasticsearch 不存在值

问题描述

我正在处理我发现的一个查询。它比我想象的要复杂一些。这是由事件名称区分的每个数据文档的一部分。

"eventTime" : "2021-07-11T08:29:00-0800",
"userId" : "P9QuPERPURPC3swJpyBb4",
"eventName" : "mko", // mko and mkp are two possible values
"eventData" : {}

目标是:userIds谁有eventName('mko')AND 没有eventName('mkp')

我无法准确理解在Elasticsearch查询中处理“不存在”的最佳方法是什么。我会很感激任何帮助。

标签: sqldatabaseelasticsearchelk

解决方案


我认为以下查询可能会对您有所帮助。

获取名为的用户mko

{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "eventName": "mko"
          }
        }
      ]
    }
  }
}  

获取名称不是 的用户mko

{
  "query": {
    "bool": {
      "must_not": [
        {
          "term": {
            "eventName": "mko"
          }
        }
      ]
    }
  }
}

获取名为的用户mkp

{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "eventName": "mkp"
          }
        }
      ]
    }
  }
}

获取名称不是 的用户mkp

{
  "query": {
    "bool": {
      "must_not": [
        {
          "term": {
            "eventName": "mkp"
          }
        }
      ]
    }
  }
}

要仅获取选定的字段,您可以使用_source查询中的字段:https ://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html 。

并检查该字段eventName是否exists在文档中。您可以在exists查询中使用must查询:https ://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-exists-query.html


推荐阅读