2013-08-30 4 views
11

次の並べ替えのスクリプトをアップグレードするが、現在は0.9で失敗します。弾性検索ソートスクリプトは0.2で動作するように使用さ

{ 
    "_script": { 
    "script": "org.elasticsearch.common.Digest.md5Hex(doc['myId'].value + 12345)", 
    "type": "string", 
    "order": "asc" 
    } 
} 

私は受け付けており、エラーがある:私が見た

PropertyAccessException[[Error: unresolvable property or identifier: org] 

この作業を行うカスタムスコアクエリを作成することを示唆しているので、少し余分な情報があります。私はすでにカスタムスコアのクエリを使用しています。このソートはスコアが一致する場合の第2の並べ替えです。これは定期的に行うことができます。上記の例の定数は、検索を実行するユーザーに基づいているため、検索するユーザーのそれぞれはランダム化されていても一貫性のある並べ替えが行われ、常に同じ結果がすべてのユーザーに表示されるわけではありません。

これはなぜ起こっているのか、同じソート機能を維持しながら修正する方法についての情報はありません。どんな助けや新しい方向への私の指しても大いに感謝します。

+0

カスタムJavaスクリプトを作成して登録し、クエリで参照する必要があるようです(「lang」:「native」パラメータも提供します)。 私は決してJavaの専門家で午前しかし、このようなスクリプトを作成する方法についての素敵なチュートリアルがあります:それはそうとhttps://github.com/imotov/elasticsearch-native-script-example 最後にランダムな並び替えスクリプトをチェックあなたが必要とするものになるために。 –

+0

MVEL以外のスクリプトはプラグインとして実装する必要があります。インラインスクリプトは、MVEL以外のスクリプトには使用できません。誰でもそれを確認できますか? –

+0

は、私はまた、JSを試してみました - あなたはまだJSのサポートを有効にするプラグインをインストールする必要がありますが、あなたは、インライン式を行うことができます。「ソート」:{ 「_script」:{ 「スクリプト」:「DOC [ 『日付』]値を*因子+ 'anyvaluehere'」、 "タイプ": "string" は、 "のparamsは":{ "因子":1.1 }、 "順序": "ASC"、 "langの": "JS" }} –

答えて

4

私はメーリングリストの投稿に返信しましたが、問題はorg.elasticsearch.common.Digestがelasticsearchから削除されたためです。私はあなたがそれを1行で置き換えることはできないと思っています。あなたがJavaをよく知っているなら、おそらくJavaのネイティブスクリプトを書くほうが簡単でしょう。

あなたの質問にはもう少し詳しく説明していますが、スクリプトソートの使用を避けることもできますか?

あなたの使用状況によって、最近追加されたrescore queryについて考えることができます。rescore queryは、セカンダリクエリを使用してトップKの結果を再考することができます。各シャードで再スコアリングが実行されることを考慮してください。したがって、最初の10個のドキュメントを尋ねると、シャドーあたりトップ10のドキュメントで再スコアリングが行われ、これは縮小フェーズで選択される上位10個のドキュメントに影響します。返されるドキュメントの順序を変更したいと思っているように思えますが、レスコアクエリでは、プロセス自体がレスコアのため変更される可能性があります。

今後のバージョンである0.90.4には、ランダムにシードされた並べ替えが含まれているため、並べ替えのランダムな面に役立ちます。詳細を知るにはrelated issueをご覧ください。

ランダムな順序付けを可能にする関数スコアクエリとrescoreクエリを組み合わせることは涼しいでしょう。

+0

ランダムシーディングの順序が良い代替品でした。メーリングリストでこの問題の原因となった正確なコミットを見つけてくれてありがとう。 –