0

J'ai un problème avec la méthode .sort(). Par exemple, j'ai Index avec texte() Champ:elasticsearch-dsl-py Tri par champ Texte()

FILTER = token_filter(
    'FILTER', 'edge_ngram', min_gram=3, max_gram=40) 
ANALYZER = analyzer(
    'ANALYZER', tokenizer='standard', type='custom', filter=[ 
     'standard', 'lowercase', 'stop', 'asciifolding',FILTER]) 

class Article(DocType): 
    title = Text(analyzer=ANALYZER) 
    body = Text(analyzer='snowball') 
    tags = Keyword() 

search = Article.search().sort('title') 
search.execute() 

lorsque je tente d'exécuter la requête de recherche avec sorte que je reçois une erreur:

elasticsearch.exceptions.RequestError: TransportError(400, 'search_phase_execution_exception', 'Fielddata is disabled on text fields by default. Set fielddata=true on [title] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory.')

Comment puis-je trier par title champ correctement dans ce cas sans réglage fieldata=true?

Répondre

1

Vous ne pouvez pas trier sur un champ text, c'est-à-dire une limitation dans elasticsearch. Il doit être un type keyword.

Malheureusement le type keyword ne peut pas avoir d'analyseur, il peut cependant avoir un normalizer qui effectue une fonction similaire, bien que limitée. Essentiellement, la différence est que vous ne pouvez pas spécifier tokenizer depuis lors, aucun tri ne serait pas beaucoup de sens (ce qui jeton utiliseriez-vous pour le tri lorsque vous avez plusieurs?)

espérons que cette aide

+0

que diriez-vous 'String()' champ? Puis-je trier sur un champ 'string'? – pkisztelinski

+1

'String' est déprécié,' String (index = "not_analyzed") 'a été remplacé par' keyword' et toutes les autres instances de 'String' sont analogues à' text', donc les mêmes restrictions s'appliquent. –

+1

Notez que vous n'avez pas à choisir, vous pouvez utiliser les deux types de champs ('text' et' keyword') en utilisant le paramètre 'fields' - https://www.elastic.co/guide/fr/elasticsearch/ reference/current/multi-fields.html –