【问题标题】:Elasticsearch script query involving root and nested values涉及根值和嵌套值的 Elasticsearch 脚本查询
【发布时间】:2016-10-18 10:51:19
【问题描述】:

假设我有一个简化的组织文档,其中包含像这样的嵌套发布值(ES 2.3):

{ 
  "organization" : { 
    "dateUpdated" : 1395211600000,

    "publications" : [ 
      { 
        "dateCreated" : 1393801200000
      },
      { 
        "dateCreated" : 1401055200000
      }
    ]
  }
}

我想查找所有发布 dateCreated

{
  "query": {
    "nested": {
      "path": "publications",
      "query": {
        "bool": {
          "filter": [
            {
              "script": {
                "script": "doc['publications.dateCreated'].value < doc['dateUpdated'].value"
              }
            }
          ]
        }
      }
    }
  }
}

我的问题是,当我执行嵌套查询时,嵌套查询无法访问根文档值,所以doc['dateUpdated'].value 无效,我得到 0 次命中。

有没有办法将值传递给嵌套查询?还是我的嵌套方法完全在这里?如有必要,我想避免为出版物创建单独的文档。

谢谢。

【问题讨论】:

标签: elasticsearch


【解决方案1】:

您不能从嵌套查询上下文中访问根值。它们被索引为单独的文档。来自documentation

嵌套子句“向下”进入嵌套 cmets 字段。它没有 不再可以访问根文档中的字段,也不能访问任何 其他嵌套文档。

您可以在copy_to 参数的帮助下得到想要的结果。另一种方法是使用 include_in_parentinclude_in_root 但它们将来可能是 deprecated 并且它也会增加索引大小,因为嵌套类型的每个字段都会包含在根文档中,因此在这种情况下copy_to 功能更好。

这是一个示例索引

PUT nested_index
{
  "mappings": {
    "blogpost": {
      "properties": {
        "rootdate": {
          "type": "date"
        },
        "copy_of_nested_date": {
          "type": "date"
        },
        "comments": {
          "type": "nested",
          "properties": {
            "nested_date": {
              "type": "date",
              "copy_to": "copy_of_nested_date"
            }
          }
        }
      }
    }
  }
}

这里 nested_date 的每个值都将被复制到 copy_of_nested_date 所以 copy_of_nested_date 看起来像 [1401055200000,1393801200000,1221542100000] 然后你可以使用这样的简单查询来得到结果。

{
  "query": {
    "bool": {
      "filter": [
        {
          "script": {
            "script": "doc['rootdate'].value < doc['copy_of_nested_date'].value"
          }
        }
      ]
    }
  }
}

您不必更改嵌套结构,但在将 copy_to 添加到 publication dateCreated

后,您必须重新索引文档

【讨论】:

    猜你喜欢
    • 2017-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多