首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对特定嵌套文档执行范围查询

对特定嵌套文档执行范围查询
EN

Stack Overflow用户
提问于 2020-04-30 14:53:39
回答 1查看 67关注 0票数 1

我有这样的文档结构。对于下面的两个文档,我们有名为interaction的嵌套文档。我只需要获得标题为工期且其值大于60的文档。

代码语言:javascript
运行
复制
  {
    "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"
      }
    ]
  }
]

是否可能只获得具有标题的文档:工期,其值大于60。嵌套文档中的value属性是text和关键字。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-30 15:31:20

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

此外,请参考官方指南,其中有一个类似的例子。

让我一步一步地给你演示一下怎么做。

指数def

代码语言:javascript
运行
复制
{
    "mappings" :{
        "properties" :{
            "interactionInfo" :{
                "type" : "nested"
            },
            "key" : {
                "type" : "keyword"
            }
        }
    }
}

索引样本文档

代码语言:javascript
运行
复制
{
    "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
        }
    ]
}

搜索查询

代码语言:javascript
运行
复制
{
    "query": {
        "nested": {
            "path": "interactionInfo",
            "query": {
                "bool": {
                    "must": [
                        {
                            "match": {
                                "interactionInfo.title": "duration"
                            }
                        },
                        {
                            "range": {
                                "interactionInfo.value": {
                                    "gt": 60
                                }
                            }
                        }
                    ]
                }
            }
        }
    }
}

和您期望的搜索结果

代码语言:javascript
运行
复制
"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
            }
          ]
        }
      }
    ]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61526331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档