【问题标题】:Range query on Nested Documents for Keyword Type关键字类型的嵌套文档的范围查询
【发布时间】:2020-05-04 15:05:02
【问题描述】:

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

这里的关键是 value 字段是关键字,而不是整数。我知道只有 Integer Range 查询才会被执行。有没有办法找到持续时间大于 60 的文档(无痛查询或脚本查询)。就像将值 Field 转换为 Integer 然后搜索文档。

{
    "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"
      }
    ]
  }

【问题讨论】:

    标签: elasticsearch elasticsearch-dsl


    【解决方案1】:

    我添加了获取interactionInfo.value>“somevalue”的脚本。脚本很慢,最好在索引时解决这个问题并使用范围查询。

    索引:

    {
      "index15" : {
        "mappings" : {
          "properties" : {
            "interactionInfo" : {
              "type" : "nested",
              "properties" : {
                "title" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword",
                      "ignore_above" : 256
                    }
                  }
                },
                "value" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword",
                      "ignore_above" : 256
                    }
                  }
                }
              }
            },
            "key" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            }
          }
        }
      }
    }
    
    

    查询:

    {
      "query": {
        "nested": {
          "path": "interactionInfo",
          "query": {
            "bool": {
              "must": [
                {
                  "term": {
                    "interactionInfo.title.keyword": {
                      "value": "duration"
                    }
                  }
                },
                {
                  "script": {
                    "script": {
                    "source":"def val=Integer.parseInt(doc['interactionInfo.value.keyword'].value); if(val>params.value) return true; else return false;",
                    "params": {
                      "value":10
                    }
                    }
                  }
                }
              ]
            }
          },
          "inner_hits": {}
        }
      }
    }
    

    【讨论】:

    • 很高兴能帮上忙:)
    猜你喜欢
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    相关资源
    最近更新 更多