如何在弹性脚本中使用特殊文档字段?

时间:2015-06-08 10:30:05

标签: elasticsearch

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

当您需要比较两个文档字段时,这非常有用。

一切正常,直到我决定使用特殊文档字段(例如:_id,_uid等)。查询始终返回空结果,如果我像这样使用它,则没有错误:doc['_id'].value

所以如何使用,例如," _id"自定义脚本中的文档字段?

1 个答案:

答案 0 :(得分:4)

使用以下格式在_id字段中对uid编制索引:type#id

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

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

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

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