我遇到.sort()
方法的问题。例如,我有Index with 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()
当我尝试使用sort执行搜索查询时出现错误:
elasticsearch.exceptions.RequestError:TransportError(400, ' search_phase_execution_exception',' Fielddata在文字上被禁用 默认情况下的字段在[title]上设置fielddata = true以便加载 通过反转索引来反转内存中的fielddata。请注意这一点 然而,可以使用大量的记忆。')
在没有设置title
的情况下,如何在这种情况下正确排序fieldata=true
字段?
答案 0 :(得分:2)
您无法对text
字段进行排序,这是elasticsearch的限制。它必须是keyword
类型。
不幸的是,类型keyword
不能有分析器,但它可以有normalizer
执行类似但功能有限的功能。基本上不同的是你不能指定一个标记化器,因为任何排序都没有多大意义(当你有多个时,你会用哪个标记进行排序?)
希望这会有所帮助