2012-04-22 7 views
1

ブール型のカスタムスクリプトフィールドを追加することは可能ですか?ドキュメントのIDがparamとして送信される配列に存在する場合はtrueを返しますか?このようなparamにIDの有無を確認するElasticsearchカスタムスクリプトフィールド

何か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"]

答えて

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を返します。

+0

あなたの答えはありがたいですが、このエラーが発生しました: '' 'クエリの失敗[メインクエリの実行に失敗しました]];ネストされた:PropertyAccessException [[エラー:メソッドを解決することができません:java.util.ArrayList.containsKey() '' 'EDIT:NVM、まだ配列としてそれを持っていた。 – Yeggeps

+0

配列が十分小さい場合は、配列を使用できます。 containsKey()をcontains()に置き換えるだけで済みます。 – imotov

+0

何が十分に小さいでしょうか? <50? – Yeggeps

関連する問題