0

我需要一些关于从ELlasticSearch (1.7.3)查询记录的帮助。我们将获得执行的评估列表,并仅显示最后完成的评估,如下所示:

 evaluation: [
  {
    id: 2,
    breaches: null
  },
  {
    id: 6,
    breaches: null
  },
  {
    id: 7,
    breaches: null
  },
  {
    id: 15,
    breaches: null
  },
  {
    id: 18,
    breaches: [
      "rule_one",
      "rule_two",
      "rule_three"
    ]
  },
  {
    id: 19,
    breaches: [
      "rule_one",
      "rule_two",
      "rule_three"
    ]
  }
]

现在我们需要根据最近执行的评估来查询记录,即只查询评估数组的最后一个对象。我们发现支持 inner_hits 对嵌套记录进行排序和限制。为此,我们编写了一个查询以 evaluation id按 desc 顺序排序,并将其大小限制为 1,如下所示:

{
  "query": {
    "bool": {
      "must": {
        "nested": {
          "path": " evaluation",
          "query": {
            "bool": {
              "must": {
                "term": {
                  " evaluation. breaches": "rule_one"
                }
              }
            }
          },
          "inner_hits": {
            "sort": {
              " evaluation.id": {
                "order": "desc"
              }
            },
            "size": 1
          }
        }
      }
    }
  }
}

请在下面找到映射:

evaluation: {
  type: "nested",
  properties: {
    id: {
      type: "long"
    },
    breaches: {
      type: "string"
    }
  }
}

我们尝试对记录进行排序,但没有成功,您能否建议一些其他方法来搜索嵌套记录的最后一个对象。

谢谢。

4

0 回答 0