2017-06-26 11 views
1

マイコードを示していますelasticsearchでアグリゲーションを使用するには?私は、次のコードで試してみましたが、エラー

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

DB名は、クラスファイルにデフォルトで設定して("comment", $test1);「はコメントは」テーブル名です。 このクエリで何か間違っていますか? 私はクエリを実行すると、私は5.xのバージョン、FieldDataで次のエラー

[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. 
        ) 

      ) 

答えて

2

はデフォルトでは、テキストフィールド上で無効になって取得しています。必要に応じて有効にする必要があります。

documentation

1としてFielddataは高カーディナリティのテキストフィールドをロードする場合は特に、ヒープ領域を大量に消費することができます。フィールド・データがヒープにロードされると、セグメントの存続期間中、そこに残ります。また、フィールドデータの読み込みは、ユーザーがレイテンシヒットを経験する原因となる高価なプロセスです。このため、フィールドデータはデフォルトで無効になっています。

あなたはフィールド上で集約を実行したい場合、あなたはそれが好きで有効にする必要があります。

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

・ホープ、このことができます!

関連する問題