elasticsearch-dsl-py按Text()字段排序

时间:2017-07-20 16:27:15

标签: python elasticsearch elasticsearch-dsl elasticsearch-dsl-py

我遇到.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字段?

1 个答案:

答案 0 :(得分:2)

您无法对text字段进行排序,这是elasticsearch的限制。它必须是keyword类型。

不幸的是,类型keyword不能有分析器,但它可以有normalizer执行类似但功能有限的功能。基本上不同的是你不能指定一个标记化器,因为任何排序都没有多大意义(当你有多个时,你会用哪个标记进行排序?)

希望这会有所帮助