我的.sort()方法有问题。例如,我有带有Text()的索引字段:
.sort()
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’,’默认情况下,文本字段上的字段数据是禁用的。在[title]上设置fielddata = true以便通过反转索引来将字段数据加载到内存中。请注意,这可以使用大量的内存。”)
title在这种情况下,如何在没有设置的情况下按字段正确排序fieldata=true?
title
fieldata=true
您无法在text字段上排序,这是elasticsearch的限制。它必须是一种类型keyword。
text
keyword
不幸的是,类型keyword不能具有分析器,但是,它可以具有normalizer执行类似的功能,尽管功能有所限制。本质上的区别在于,您无法指定令牌生成器,因为那样排序就没有多大意义(当有多个令牌时,您将使用哪个令牌进行排序?)
normalizer
希望这可以帮助