基于嵌套键值数组对弹性搜索查询进行排序

2024-04-07

我有一个 json

{
    "uniqueKey": "918084",
    "dataValue": {
        "metadata": {
            "timestamps": [{
                "key": "startTime",
                "value": "2017-02-07T18:00:00-06:00"
            }, {
                "key": "processedTime",
                "value": "2017-02-07T18:05:00-06:00"
            }]
        }
    }
}

我必须编写一个查询来按 startTime 进行排序。有谁知道我如何在弹性搜索中为此编写查询吗? dataValue 是一个嵌套字段。


您可以使用sort with 嵌套路径.
假设您有以下映射:

{
  "test-so": {
    "mappings": {
      "with-dates": {
        "properties": {
          "datavalue": {
            "type": "nested",
            "properties": {
              "metadata": {
                "type": "nested",
                "properties": {
                  "timestamps": {
                    "type": "nested",
                    "properties": {
                      "key": {
                        "type": "keyword"
                      },
                      "value": {
                        "type": "date",
                        "format": "date_optional_time"
                      }
                    }
                  }
                }
              }
            }
          },
          "uniquekey": {
            "type": "keyword"
          }
        }
      }
    }
  }
}

您可以使用sort如下:

GET /test-so/with-dates/_search
{
  "query": {
    "nested": {
      "path": "datavalue.metadata.timestamps",
      "query": {
        "term": {
          "datavalue.metadata.timestamps.key": {
            "value": "startTime"
          }
        }
      }
    }
  },
  "sort": [
    {
      "datavalue.metadata.timestamps.value": {
        "order": "desc",
        "nested_path": "datavalue.metadata.timestamps"
      }
    }
  ]
}

这将返回按日期订购的文件开始时间.
希望这对您有所帮助,也许映射不完全相同。 (注:在 Elastic 5.1 上测试)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于嵌套键值数组对弹性搜索查询进行排序 的相关文章

随机推荐