2017-06-26 2 views
1

Mein Code:Wie Aggregation in elasticsearch verwenden? Ich habe versucht, mit folgenden Code aber zeigt Fehler

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

DB-Name standardmäßig in Klassendatei festgelegt ist und ("comment", $test1); ‚Kommentar‘ ist der Name der Tabelle. Alles falsch in dieser Abfrage? Wenn ich die Abfrage ausführen, erhalte ich die folgenden Fehler

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

      ) 

Antwort

2

In Version 5.x wird FieldData auf Textfelder standardmäßig deaktiviert. Sie müssen sie aktivieren, wenn Sie möchten.

Per documentation

Fielddata können viele Heap-Speicher verbrauchen, vor allem, wenn Felder hohe Mächtigkeit Text geladen werden. Sobald die Felddaten in den Heap geladen wurden, bleiben sie für die gesamte Lebensdauer des Segments erhalten. Außerdem ist das Laden von Felddaten ein teurer Prozess, bei dem Benutzer Latenztreffer erleiden können. Aus diesem Grund ist fielddata standardmäßig deaktiviert.

Wenn Sie Aggregation wollen auf dem Feld laufen, müssen Sie es gerne aktivieren:

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

Hoffnung !!

Verwandte Themen