2017-10-13 7 views
0

私はyii\elasticsearch\Queryを使用しています。hereのようにスクリプトベースの並べ替えを使用します。私はYiiと何の可能性も見当たりません。yiiでelasticsearchスクリプトベースの並べ替えを使用する方法

2つ以上のフィールドの合計でソートする必要があるため、インデックス作成時にフィールドを定義できません。ソートに関連するフィールドは動的です。

私はYiiので許可されているものを、その場でスクリプトフィールドを定義しようとしました:

$query->fields = array_merge($allFields, [ 
    'rda_sum' => "doc['nutrient_220_rda_rate'].value + doc['nutrient_221_rda_rate'].value", 
]); 

しかし残念ながら、スクリプトフィールドはorderBy方法で使用することはできません。エラーメッセージが表示されます。

No mapping found for [rda_sum] in order to sort on 

ご存知ですか?

+0

によってあなたのスコア計算の結果を乗算? – Miek

+0

いいえ、私はyii \ elasticsearch \ QueryというPHPコードを見ているので、これは不可能です。 –

答えて

0

あなたの最善の解決策は、計算されたフィールドではなくスコアとして適用することだと思います。

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html

そして、あなたは逆の順序に必要がある場合、あなたはこの問題を考え出し取得しました-1

+0

Thxですが、並べ替えに関連するフィールドはさまざまなので、その場で並べ替えを設定する必要があります。さもなければ、yii \ elasticsearch \ Queryであなたのソリューションをどのように使うべきか、私は見ません。 –

関連する問題