我試着寫與自定義腳本查詢在elasticsearch:如何在彈性腳本中使用特殊文檔字段?
當您需要比較兩個文檔字段時,這非常有用。
一切工作正常,直到我決定使用特殊文檔字段(例如:_id,_uid等)。查詢總是返回空的結果,如果我像這樣使用它,則不會有錯誤:doc['_id'].value
。
那麼如何使用自定義腳本中文檔的「_id」字段?
我試着寫與自定義腳本查詢在elasticsearch:如何在彈性腳本中使用特殊文檔字段?
當您需要比較兩個文檔字段時,這非常有用。
一切工作正常,直到我決定使用特殊文檔字段(例如:_id,_uid等)。查詢總是返回空的結果,如果我像這樣使用它,則不會有錯誤:doc['_id'].value
。
那麼如何使用自定義腳本中文檔的「_id」字段?
_id
在uid
字段中編入索引,使用以下格式:type#id
。
所以,你的腳本應該是這樣的(一個名爲my_type
類型和1
的ID):
{
"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
。