1

我的方法有问题.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()

当我尝试使用 sort 执行搜索查询时,出现错误:

elasticsearch.exceptions.RequestError: TransportError(400, 'search_phase_execution_exception', 'Fielddata 在默认情况下在文本字段上被禁用。在 [title] 上设置 fielddata=true 以便通过反转倒排索引将字段数据加载到内存中。请注意,这可以但是使用大量内存。')

在这种情况下,如何title在不设置的情况下正确按字段排序fieldata=true

4

1 回答 1

3

您不能对text字段进行排序,这是弹性搜索的一个限制。它必须是 type keyword

不幸的是 typekeyword不能有一个分析器,但是,它可以有一个normalizer执行类似的功能,尽管有点有限。本质上的区别在于您不能指定分词器,因为这样任何排序都没有多大意义(当您有多个分词时,您将使用哪个分词进行排序?)

希望这可以帮助

于 2017-07-20T19:29:30.287 回答