使用Elasticsearch自定义脚本字段检查param数组中是否存在id

时间:2012-04-22 12:28:15

标签: elasticsearch tire mvel

是否可以添加一个布尔的自定义脚本字段,如果文档的id存在于作为参数发送的数组中,则返回true?

像这样https://gist.github.com/2437370

使用mvel执行此操作的正确方法是什么?

更新 无法按照Imotov的回答中的规定使其工作。

映射:

类别:

:sort=>{:_script=>{:script=>"return friends_visits_ids.contains(_fields._id.value)", :type=>"string", :params=>{:friends_visits_ids=>["4f8d425366eaa71471000011"]}, :order=>"asc"}}}

place: { properties: { _id: { index: "not_analyzed", store: "yes" }, } }

我没有收到任何错误,文件没有正确排序。

更新2

哦,我确实在文件中得到了回复:

"sort"=>["false"]

1 个答案:

答案 0 :(得分:5)

你走在正确的轨道上。如果此列表很大,那么在地图而不是数组中存储id列表可能更有效。

"sort" : {
  "_script" : {
    "script" : "return friends_visits_ids.containsKey(_fields._id.value)",
    "type" : "string",
    "params": {
      "friends_visits_ids": { "1" : {}, "2" : {}, "4" : {}}
    }
  }
}

确保id field is stored。否则_fields._id.value将为所有记录返回null。