【问题标题】:How to query results considering missing keys or matching values如何在考虑缺少键或匹配值的情况下查询结果
【发布时间】:2021-11-15 22:36:26
【问题描述】:

所以,我有一个对象叫做观众。该对象可能包含许多键,例如年龄、性别、工作角色等。

类似这样的:

"audience": {
        "gender": [
          "Male",
          "Female"
        ],
        "household_income": [
          "<$25,000",
          "$25,001-$50,000",
          "$50,001-$100,000"
        ]
      }

而且我想查询类似“其中的 Audience.gender = 'Male' 或 Audience.gender 不存在”之类的内容。我是弹性搜索的新手,所以我很困惑如何实现这一点。

【问题讨论】:

  • 字段性别实际上是文档中的一个数组吗?这对我来说似乎有点奇怪,但为了提供正确的查询作为答案,了解这一点很重要。
  • 是的,它是一个数组。我提供的代码示例取自我的一份文档。为什么你觉得很奇怪?如果您知道任何更好的结构方式,我想知道。我只是这样组织它,因为我认为它会更容易。

标签: elasticsearch elasticsearch-dsl


【解决方案1】:

您可以为此使用简单的匹配查询:

{
  "query": {
    "match": {
      "audience.gender": "Male" 
    }
  }
}

为了否定相同的搜索查询,请使用布尔查询而不是 must_not

{
    "query": {
        "bool": {
            "must_not": {
                "match": {
                    "audience.gender": "Male"
                }
            }
        }
    }
}

查看有关数组的文档here

关于布尔查询here

如果您的列表条目是实际的 obj.看看nested fieldtype

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-13
    • 2022-11-10
    • 2017-10-28
    • 1970-01-01
    • 1970-01-01
    • 2016-10-11
    • 1970-01-01
    相关资源
    最近更新 更多