2017-10-13 5 views
0

J'utilise yii\elasticsearch\Query, et je veux utiliser le tri basé sur le script, comme décrit here. Je ne vois aucune possibilité avec Yii.Comment utiliser le tri par script elasticsearch dans yii

Je ne peux pas définir le champ à l'indexation, car je dois trier par la somme de 2 ou plusieurs champs. Les champs impliqués dans le tri sont dynamiques.

J'ai essayé de définir un champ de script à la volée, ce qui est permis par Yii:

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

Mais malheureusement, le champ de script ne peut pas être utilisé dans la méthode orderBy. Je reçois le message d'erreur:

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

Une idée?

+0

Avez-vous eu ce problème a compris? – Miek

+0

Non. Comme je vois le code PHP de yii \ elasticsearch \ Query, ce n'est pas possible. –

Répondre

0

Je pense que votre meilleure solution serait de l'appliquer comme un score plutôt que comme un champ calculé.

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

Et si vous avez besoin de l'ordre inverse, il faut multiplier le résultat de votre calcul du score de -1

+0

Thx, mais je dois régler la commande à la volée, car les champs impliqués dans le tri sont variables. Sinon, je ne vois pas, comment je devrais utiliser votre solution avec yii \ elasticsearch \ Query. –