我试图在elasticsearch中使用自定义脚本编写查询:
当您需要比较两个文档字段时,这非常有用。
一切正常,直到我决定使用特殊文档字段(例如:_id,_uid等)。查询始终返回空结果,如果我像这样使用它,则没有错误:doc['_id'].value
。
所以如何使用,例如," _id"自定义脚本中的文档字段?
答案 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]
是id
而org.elasticsearch.index.mapper.Uid.splitUidIntoTypeAndId(new org.apache.lucene.util.BytesRef(doc['_uid'].value))[0]
是type
。