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

回到顶部