如何在elasticsearch中使用聚合?我尝试使用以下代码,但显示错误

时间:2017-06-26 05:12:59

标签: php codeigniter elasticsearch

我的代码:

$test1  = '{
            "query": {
                "query_string": {
                      "query": "*"
                    }
             },
            "aggs": {
                    "AGE": {
                      "filter": {
                        "range": {
                          "age": { }
                        }
                      }
                    }
            },
            "sort": { 
                "age": {
                    "order": "desc" 
                } 
            }
    }';
$response = $this->elasticsearch->advancedquery("comment", $test1);

数据库名称默认在类文件中设置,("comment", $test1);'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.
                    )

            )

1 个答案:

答案 0 :(得分:2)

在5.x版本中,文本字段上禁用FieldData默认情况下。如果需要,您需要启用它们。

根据documentation

  

Fielddata会消耗大量的堆空间,尤其是在加载高基数文本字段时。一旦fielddata已加载到堆中,它将在该段的生命周期内保留。此外,加载fielddata是一个昂贵的过程,可能会导致用户遇到延迟命中。这就是默认情况下禁用fielddata的原因。

如果要在字段上运行聚合,则需要启用它:

PUT my_index/_mapping/my_type
{
   "properties": {
   "age": { 
   "type":     "text",
   "fielddata": true
    }
   }
 }

希望这会有所帮助!!