Elasticsearch Felddaten (Fielddata) für Custom Fields aktivieren


Textfelder sind nicht für Operationen optimiert, die Felddaten pro Dokument erfordern, wie z. B. Aggregationen und Sortierungen. Diese Operationen sind daher standardmäßig deaktiviert. Bitte verwenden Sie stattdessen ein Schlüsselwortfeld. Alternativ können Sie fielddata=true auf [customFields.nameDesFeldes] setzen, um Felddaten zu laden, indem Sie den invertierten Index nicht invertieren. Beachten Sie, dass dies erheblichen Speicherplatz beanspruchen kann.


Voraussetzungen:

  • cURL
  • IP-Adresse des Elasticsearch-Servers
  • Sofern abweichend von Port 9200 den Port betreffende API-Anfragen an Elasticsearch
  • Elasticsearch-Benutzer mit Berechtigung "Monitor" oder "Manage Index" für den jeweiligen Datenstrom, Index oder Alias
  • Name des Feldes, für das Felddaten aktiviert werden sollen


Betreffende Fehlermeldung aus Ihrer Applikation

Fielddata is disabled on [customFields.nameDesFeldes] in [name_des_index_test1234abc1234def12341234]


Vorhandene Indexe ermitteln

Bevor die Felddaten für ein Textfeld aktiviert werden, muss zunächst ermittelt werden, ob der betreffende Index in Ihrer Elasticsearch-Instanz existiert.

Um die vorhandenen Indexe zu ermitteln, verwenden Sie folgenden cURL-Befehl:

curl --user "<Benutzername>:<Passwort>" -X GET "<IP-Adresse>:<ElasticsearchPort>/_cat/indices?pretty"


Ausgabe-Beispiel:

green open sw_xy_product_test1234abc1234def12341234         GRqwRVjfQ5qgCBPy-vRUQg 1 0  0   0   227b   227b


Sollte der gesuchte Index nicht vorhanden sein, muss der entsprechende Index zunächst angelegt werden.



Mapping für das Custom Field ermitteln

Nachdem Sie verifiziert haben, dass der Index vorhanden ist, muss das Mapping für das betreffende Custom Field Textfeld ermittelt werden.

curl --user "<Benutzername>:<Passwort>" -X GET "<IP-Adresse>:<ElasticsearchPort>/name_des_index_test1234abc1234def12341234/_mapping/field/custom*?pretty=true"


Ausgabe-Beispiel:

...
"customFields" : {
          "dynamic" : "true",
          "properties" : {
            "custom_test_set_numbers_" : {
              "type" : "double"
            },
            "custom_test_set_test_text" : {
              "type" : "long"
            }
          }
        },
...



Felddaten für Custom Field aktivieren

Sofern Sie den betreffenden Index, als auch das betreffende Custom Field verifiziert haben, können Sie die Felddaten mit folgendem cURL-Befehl zu true setzen:

curl --user "<Benutzername>:<Passwort>" -X PUT "<IP-Adresse>:<ElasticsearchPort>/name_des_index_test1234abc1234def12341234/_mapping?pretty" -H 'Content-Type: application/json' -d'
{
  "properties": {
    "customFields.core_assortment_dg": { 
      "type":     "text",
      "fielddata": true
    }
  }
}'


Verifizieren Sie anschließend Ihre Änderungen, indem Sie das Mapping für das Custom Field wie zuvor beschrieben überprüfen.

Wenn das customField korrekt zu true angepasst wurde, sind die Elasticsearch Felddaten (Fielddata) für Custom Field erfolgreich aktiviert worden.


Referenz: https://www.elastic.co/guide/en/elasticsearch/reference/current/text.html#fielddata-mapping-param