2017-10-18 3 views
0

J'essaie d'utiliser multi_match avec type = best_fields pour prendre le score du meilleur champ dans le tableau, mais je reçois des scores totaux d'éléments dans le tableau. Comment créer une requête, qui n'obtient que le score maximum de l'élément de tableau et ignore les autres scores d'éléments?Comment prendre seulement le meilleur score de tableau?

Documents:

1: { "field": ["a b c", "b c"] } 
2: { "field": ["e f g", "b c"] } 

Query:

{ 
    "query": { 
    "multi_match": { 
     "query": "c", 
     "fields": [ 
     "field" 
     ], 
     "type": "best_fields" 
    } 
    } 
} 

Résultat:

1: {"score": 0.39, "highlight": ["a b <em>c</em>", "b <em>c</em>"] } 
2: {"score": 0.28, "highlight": ["b <em>c</em>"]} 

Mapping:

{ 
    "mappings": { 
    "bft": { 
     "_all": { 
     "enabled": false 
     }, 
     "properties": { 
      "field": { 
       "type": "text" 
      } 
     } 
    } 
    } 

Répondre

0

Je ne crois pas qu'il vous soit réellement possible de faire ce que vous demandez ici. Le problème se résume à la façon dont les tableaux de chaînes vs une seule valeur sont traitées par l'algorithme de notation. J'ai fait un peu de creuser dans ce problème après avoir vu votre question et l'information que j'ai pu trouver sur le sujet semble impliquer que ["abc", "bc"] est équivalent à ["abcbc"] ou "abcbc" quand il s'agit de marquer.

Lorsque vous obtenez un document de retour de ElasticSearch, les tableaux seront en le même ordre que lorsque vous indexé le document. Le champ _source que vous obtenez contient exactement le même document JSON que vous indexé.

Cependant, les tableaux sont indexés, consultables sous la forme de champs à valeurs multiples, qui ne sont pas ordonnés. Au moment de la recherche, vous ne pouvez pas faire référence à "le premier élément " ou "le dernier élément". Pensez plutôt à un tableau en tant que sac de valeurs . Reference

Pour accomplir ce que vous voulez, je crois que vous aurez besoin de sortir vos valeurs de tableau individuelles dans leur propre document et de fournir un autre champ que vous pouvez utiliser comme un filtre pour « grouper » vos documents.