2015-06-08 29 views
1

我試着寫與自定義腳本查詢在elasticsearch:如何在彈性腳本中使用特殊文檔字段?

當您需要比較兩個文檔字段時,這非常有用。

一切工作正常,直到我決定使用特殊文檔字段(例如:_id,_uid等)。查詢總是返回空的結果,如果我像這樣使用它,則不會有錯誤:doc['_id'].value

那麼如何使用自定義腳本中文檔的「_id」字段?

回答

4

_iduid字段中編入索引,使用以下格式: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]idorg.elasticsearch.index.mapper.Uid.splitUidIntoTypeAndId(new org.apache.lucene.util.BytesRef(doc['_uid'].value))[0]type

相關問題