【发布时间】:2015-06-08 10:30:05
【问题描述】:
我正在尝试在 elasticsearch 中使用自定义脚本编写查询:
这在您需要比较两个文档字段时很有用。
一切正常,直到我决定使用特殊的文档字段(例如:_id、_uid 等)。查询总是返回空结果,如果我这样使用它就不会出现错误:doc['_id'].value。
那么如何在自定义脚本中使用例如文档的“_id”字段呢?
【问题讨论】:
标签: elasticsearch
我正在尝试在 elasticsearch 中使用自定义脚本编写查询:
这在您需要比较两个文档字段时很有用。
一切正常,直到我决定使用特殊的文档字段(例如:_id、_uid 等)。查询总是返回空结果,如果我这样使用它就不会出现错误:doc['_id'].value。
那么如何在自定义脚本中使用例如文档的“_id”字段呢?
【问题讨论】:
标签: elasticsearch
_id 在uid 字段中被索引,使用这种格式: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] 是id,org.elasticsearch.index.mapper.Uid.splitUidIntoTypeAndId(new org.apache.lucene.util.BytesRef(doc['_uid'].value))[0] 是type。
【讨论】: