Php 如何在elasticsearch中使用聚合?我尝试使用以下代码,但显示错误
我的代码:Php 如何在elasticsearch中使用聚合?我尝试使用以下代码,但显示错误,php,codeigniter,
elasticsearch,Php,Codeigniter,
elasticsearch,我的代码: $test1 = '{ "query": { "query_string": { "query": "*" } }, "aggs": { "AGE": { "filter": {
$test1 = '{
"query": {
"query_string": {
"query": "*"
}
},
"aggs": {
"AGE": {
"filter": {
"range": {
"age": { }
}
}
}
},
"sort": {
"age": {
"order": "desc"
}
}
}';
$response = $this->elasticsearch->advancedquery("comment", $test1);
默认情况下,在类文件和(“comment”,$test1)中设置DB名称代码>“comment”是表名。
这个问题有什么不对劲吗?
当我运行查询时,我得到以下错误
[root_cause] => Array
(
[0] => Array
(
[type] => illegal_argument_exception
[reason] => Fielddata is disabled on text fields by default. Set fielddata=true on [age] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead.
)
)
在5.x版本中,默认情况下,文本字段上禁用了
FieldData。如果需要,您需要启用它们
依照
Fielddata会消耗大量堆空间,尤其是在加载高基数文本字段时。一旦fielddata加载到堆中,它将在段的生存期内保持在那里。此外,加载fielddata是一个昂贵的过程,可能会导致用户体验延迟命中。这就是默认情况下禁用fielddata的原因
如果要在字段上运行聚合,则需要像以下那样启用它:
PUT my_index/_mapping/my_type
{
"properties": {
"age": {
"type": "text",
"fielddata": true
}
}
}
希望这有帮助