【问题标题】:Elasticsearch query identical arraysElasticsearch 查询相同的数组
【发布时间】:2020-07-29 10:47:52
【问题描述】:

我有这样的文件:

Doc1

{
"id": ...,
...
"articles": [
  {
    "id": "5cdd17c7e24f6e05d487b2c2#142936",
    ...
  },
  {
    "id": "5cdd17c7e24f6e05d487b2c2#226536",
    ...
  }
...
}

Doc2

{
"id": ...,
...
"articles": [
  {
    "id": "5cdd17c7e24f6e05d487b2c2#142936",
    ...
  },
  {
    "id": "5cdd17c7e24f6e05d487b2c2#226536",
    ...
  },
  {
    "id": "5cdd17c7e24f6e05d487b2c2#142965",
    ...
  }
...
}

Doc3

{
"id": ...,
...
"articles": [
  {
    "id": "5cdd17c7e24f6e05d487b2c2#142936",
    ...
  }
...
}

我希望文档中包含我需要的文章数组。例如,如果我的文章 ID 数组是 ['5cdd17c7e24f6e05d487b2c2#142936', '5cdd17c7e24f6e05d487b2c2#226536'] 我只想获取 Doc1。

现在我有这个查询:

GET my_index/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "articles",
            "query": {
              "query_string": {
                "default_field": "articles.id",
                "query": "5cdd17c7e24f6e05d487b2c2#142936 AND 5cdd17c7e24f6e05d487b2c2#226536"
              }
            }
          }
        }
      ]
    }
  }
}

但是有了这个,我得到了 Doc1 和 Doc2...

【问题讨论】:

    标签: arrays elasticsearch


    【解决方案1】:

    假设articles.idkeyword 类型,我认为这应该适合您(不确定这是编写查询的最有效方式):

    GET my_index/_search
    {
      "query": {
        "bool": {
          "must": [
            {
              "nested": {
                "path": "articles",
                "query": {
                  "term": {
                    "articles.id": "5cdd17c7e24f6e05d487b2c2#142936"
                  }
                }
              }
            },
            {
              "nested": {
                "path": "articles",
                "query": {
                  "term": {
                    "articles.id": "5cdd17c7e24f6e05d487b2c2#226536"
                  }
                }
              }
            }
          ],
          "must_not": {
            "nested": {
              "path": "articles",
              "query": {
                "query_string": {
                  "default_field": "articles.id",
                  "query": "NOT 5cdd17c7e24f6e05d487b2c2#142936 AND NOT 5cdd17c7e24f6e05d487b2c2#226536"
                }
              }
            }
          }
        }
      }
    }
    

    【讨论】:

    • 完美!!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-28
    • 1970-01-01
    相关资源
    最近更新 更多