【问题标题】:How to use special document fields in scripts in elastic?如何在弹性脚本中使用特殊文档字段?
【发布时间】:2015-06-08 10:30:05
【问题描述】:

我正在尝试在 elasticsearch 中使用自定义脚本编写查询:

这在您需要比较两个文档字段时很有用。

一切正常,直到我决定使用特殊的文档字段(例如:_id、_uid 等)。查询总是返回空结果,如果我这样使用它就不会出现错误:doc['_id'].value

那么如何在自定义脚本中使用例如文档的“_id”字段呢?

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    _iduid 字段中被索引,使用这种格式:type#id

    因此,您的脚本应该如下所示(对于名为 my_type 的类型和 ID 为 1):

    {
      "query": {
        "filtered": {
          "filter": {
            "script" : {
                "script" : "doc['_uid'].value == 'my_type#1'"
            }
          }
        }
      }
    }
    

    更精细的解决方案,取出id ES-way 是这样的:

    {
      "query": {
        "filtered": {
          "filter": {
            "script": {
              "script": "org.elasticsearch.index.mapper.Uid.splitUidIntoTypeAndId(new org.apache.lucene.util.BytesRef(doc['_uid'].value))[1].utf8ToString() == '1'"
            }
          }
        }
      }
    }
    

    其中org.elasticsearch.index.mapper.Uid.splitUidIntoTypeAndId(new org.apache.lucene.util.BytesRef(doc['_uid'].value))[1]idorg.elasticsearch.index.mapper.Uid.splitUidIntoTypeAndId(new org.apache.lucene.util.BytesRef(doc['_uid'].value))[0]type

    【讨论】:

      猜你喜欢
      • 2021-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-18
      相关资源
      最近更新 更多