对特定的嵌套文档进行范围查询

Doing a Range Query over particular Nested Document

我有这样的文档结构。对于下面的两个文档,我们有称为交互信息的嵌套文档。我只需要获取标题为 duration 且其值大于 60

的文档
  {
    "key": "f07ff9ba-36e4-482a-9c1c-d888e89f926e",
    "interactionInfo": [
      {
        "title": "duration",
        "value": "11"
      },
      {
        "title": "timetaken",
        "value": "9"
      },
      {
        "title": "talk_time",
        "value": "145"
      }
    ]
  },
  {
    "key": "f07ff9ba-36e4-482a-9c1c-d888e89f926e",
    "interactionInfo": [
      {
        "title": "duration",
        "value": "120"
      },
      {
        "title": "timetaken",
        "value": "9"
      },
      {
        "title": "talk_time",
        "value": "60"
      }
    ]
  }
]

是否可以在嵌套的Document is text中只获取title: duration且其值大于60.Value 属性的文档和关键字。

你的解决方案中有一些基本错误,为了利用范围查询(即找到一个值超过 60 的文档,你需要在你的情况下将它们存储为整数)。

另请参考this官方指南,其中有类似的例子。

让我向您展示一个关于如何操作的分步示例。

索引定义

{
    "mappings" :{
        "properties" :{
            "interactionInfo" :{
                "type" : "nested"
            },
            "key" : {
                "type" : "keyword"
            }
        }
    }
}

索引示例文档

{
    "key": "f07ff9ba-36e4-482a-9c1c-d888e89f926e",
    "interactionInfo": [
      {
        "title": "duration",
        "value": 120. --> note, not using `""` double quotes which would store them as integer
      },
      {
        "title": "timetaken",
        "value": 9
      },
      {
        "title": "talk_time",
        "value": 60
      }
    ]
  }


{
    "key": "f07ff9ba-36e4-482a-9c1c-d888e89f926e",
    "interactionInfo": [
        {
            "title": "duration",
            "value": 11
        },
        {
            "title": "timetaken",
            "value": 9
        },
        {
            "title": "talk_time",
            "value": 145
        }
    ]
}

搜索查询

{
    "query": {
        "nested": {
            "path": "interactionInfo",
            "query": {
                "bool": {
                    "must": [
                        {
                            "match": {
                                "interactionInfo.title": "duration"
                            }
                        },
                        {
                            "range": {
                                "interactionInfo.value": {
                                    "gt": 60
                                }
                            }
                        }
                    ]
                }
            }
        }
    }
}

以及您预期的搜索结果

"hits": [
      {
        "_index": "nestedsoint",
        "_type": "_doc",
        "_id": "2",
        "_score": 2.0296195,
        "_source": {
          "key": "f07ff9ba-36e4-482a-9c1c-d888e89f926e",
          "interactionInfo": [
            {
              "title": "duration",
              "value": 120
            },
            {
              "title": "timetaken",
              "value": 9
            },
            {
              "title": "talk_time",
              "value": 60
            }
          ]
        }
      }
    ]