我对.sort()方法有问题。例如,我有带有Text()字段的Index:
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”,“默认情况下在文本字段上禁用fielddata。在标题上设置fielddata=true,以便通过取消倒排索引在内存中加载字段数据。注意,这可以使用重要内存。”)
在这种情况下,如何正确地按title字段进行排序而不设置fieldata=true
发布于 2017-07-20 19:29:30
不能对text字段进行排序,这是elasticsearch中的一个限制。它需要是一个类型的keyword。
不幸的是,类型keyword不能有分析器,但是它可以有一个执行类似(尽管有点有限)功能的normalizer。本质上,区别在于您不能指定一个令牌程序,因为那样的话,任何排序都不会有多大意义(当您有多个排序时,您将使用哪个令牌进行排序?)
希望这能帮上忙
https://stackoverflow.com/questions/45220352
复制相似问题