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