我目前遇到了这个问题,6个聚合中有3个因错误而失败。
"type": "illegal_argument_exception",
"reason": "Fielddata is disabled on text fields by default. Set fielddata=true on [experience_slug] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory."
有问题的字段被定义为类型关键字(doc_values为true),因此查询时不会产生任何问题。 (直接从_mapping部分获取):
"experience_slug": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
},
"analyzer": "default",
"search_analyzer": "default_search"
},
由于文档,谷歌和StackOverflow都没有为这个问题提供答案,我认为存在根本性的错误。
我能想到的唯一一件事是该领域的未设置数据。现在该领域确保有内容。
此外,在此过程中,我已删除查询的其他所有部分以隔离问题,使用aggs
以及aggregations
,重命名聚合的名称以确保..
以下是请求正文和匿名搜索网址:
http://localhost:9200/project_development/some_type/_search
{
"aggregations": {
"foo": {
"terms": {
"field": "experience_slug"
}
}
}
}
Elasticsearch 5.2.2在具有有限(但足够)内存的官方docker容器中。 日志中也没有条目。
我很欣赏如何解决这个难题的任何暗示。
最好的问候
答案 0 :(得分:1)
聚合需要不同的数据结构而不是倒排索引。 例如
如果我使用这些值和标准分析器索引字段 数据棕色, 狗, 小狗 , 狐狸 , 狐狸, 在, 跳了, 懒, 飞跃, 结束了, 快,夏天,
这是反向索引
Term Doc_1 Doc_2 Doc_3
------------------------------------
brown | X | X |
dog | X | | X
dogs | | X | X
fox | X | | X
foxes | | X |
in | | X |
jumped | X | | X
lazy | X | X |
leap | | X |
over | X | X | X
quick | X | X | X
summer | | X |
the | X | | X
聚合使用的结构
Doc Terms
-----------------------------------------------------------------
Doc_1 | brown, dog, fox, jumped, lazy, over, quick, the
Doc_2 | brown, dogs, foxes, in, lazy, leap, over, quick, summer
Doc_3 | dog, dogs, fox, jumped, over, quick, the
所以聚合
现在,
现在解决方案
但请确保这两者都会给出不同的结果,因为experience_slug将在分析
后生成的术语上进行汇总experience_slug.keyword将汇总字段的完整值。
experience_slug和experience_slug.keyword 是两个不同的字段,具有不同的设置但数据相同。