0

.sort()メソッドに問題があります。elasticsearch-dsl-py Text()フィールドでソート

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() 

私は、ソートと検索クエリを実行しようとすると、私はエラーを取得:

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.')

は、どのように私は、この場合には適切にtitleフィールドで並べ替えることができますたとえば、私は、テキストとインデックス()フィールドを持っていますfieldata=trueを設定せずに

答えて

1

textフィールドでソートすることはできません。これはelasticsearchの制限です。タイプはkeywordである必要があります。

残念ながらタイプkeywordはアナライザを持つことはできませんが、ビット制限されていても同様の機能を実行するnormalizerがあります。基本的に `)(違いは(?あなたが複数ある場合、ソートに使用するトークン)を任意のソートはあまり意味がありませんので、あなたはトークナイザを指定することはできませんということです

希望は、これは

+0

どのように文字列'についてのに役立ちますフィールド? 'string'フィールドをソートすることはできますか? – pkisztelinski

+1

'String'は非推奨です。' String(index = "not_analyzed") 'は' keyword'で置き換えられ、他のすべての 'String'インスタンスは' text'に似ていますので同じ制限が適用されます。 –

+1

あなたは 'fields'パラメータ(https://www.elastic.co/guide/en/elasticsearch/)を使って両方のフィールドタイプ(' text'と 'keyword')を使用することができます。 reference/current/multi-fields.html –

関連する問題