【问题标题】:Get all documents for _id stored as array values inside the document using elasticsearch query使用 elasticsearch 查询获取 _id 的所有文档作为数组值存储在文档中
【发布时间】:2019-09-26 23:27:50
【问题描述】:

以下是我的映射索引文档示例:

{
  "_index": "sample_index",
  "_type": "default",
  "_id": "id-sample-0005",
  "_score": 1,
  "_source": {
      "name": "Eenst Y kios",
      "ids_mapped": [
         "id-sample-00010",
         "id-sample-00011"
      ]
   }
}

我需要编写一个查询,该查询将根据作为参数传递的 _id 获取文档,并且所有 _id 值都存在于“ids_mapped”字段中。

GET sample_index/_search
{
  "query": {
    "terms": {
      "_id": [
         "id-sample-0005"
      ]
    }
  }
}

不知道如何编写上面的查询以满足我的要求。基本上在上面的查询中,用户将只传递“id-sample-0005”值作为参数,查询应该返回 3 个文档。即 [id-sample-0005,id-sample-00010,id-sample-00011]。

非常感谢任何帮助。

【问题讨论】:

  • @val 我知道,但我想在同一个查询中实现,而不是触发另一个查询。我相信会有办法实现这一目标。使用无痛脚本或过滤查询。
  • 你能解释一下目标上下文吗?也许您可以使用父子或不同的建模。但是如果您需要根据结果或一次查询来查询文档,则必须执行 2 次查询(如 val 所说)
  • 似乎不可能使用单个查询,我想我最终会触发 2 个查询。
  • 绝对有可能,看我的回答;-)

标签: elasticsearch nest sense


【解决方案1】:

实现此目的的一种方法是利用terms lookup feature

以下查询将返回 ID 为 id-sample-0005id-sample-00010id-sample-00011 的所有三个文档:

POST sample_index/_search?pretty
{
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "_id": "id-sample-0005"              <-- input your ID here
          }
        },
        {
          "terms": {
            "_id": {
              "index": "sample_index",
              "type": "default",
              "id": "id-sample-0005",            <-- and here
              "path": "ids_mapped.keyword"
            }
          }
        }
      ]
    }
  }
}

第一个子约束返回主文档本身,第二个子约束将返回具有映射 ID 的文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-28
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-07
    相关资源
    最近更新 更多