2

Eigentlich meine Frage ist sehr einfach: Ich möchte meine hashmap Wert not_analyzed!Spring Elasticsearch HashMap [String, String] Mapping Wert kann nicht not_analyzed

Jetzt habe ich ein Objekt enthält eine hashmap [string, string], wie folgt aussieht:

class SomeObject{ 
    String id; 
    @Field(type=FieldType.Object, index=FieldIndex.not_analyzed) 
    Map<String, String> parameters; 
} 

dann Frühling Daten Elasticsearch die Zuordnung wie dies bei der beggining erzeugen:

{ 
    "id": { 
     "type": "string" 
    }, 
    "parameters": { 
     "type": "object" 
    } 
} 

dann nach Ich füge einige Objekte zu den es, fügen Sie weitere Attribute wie folgt hinzu:

jetzt, weil der Wert der Parameter wird analysiert, so kann nicht Suche von es sein, ich meine kann chinesischen Wert nicht suchen, ich habe versucht, ich kann Englisch in dieser Zeit suchen.

dann, nach diesem Artikel lesen https://stackoverflow.com/a/32044370/4148034 ich das Mapping Update manuell THIS:

{ 
    "id": { 
     "type": "string" 
    }, 
    "parameters": { 
     "properties": { 
      "shiduan": { 
       "type": "string", 
       "index": "not_analyzed" 
      }, 
      "季节": { 
       "type": "string", 
       "index": "not_analyzed" 
      } 
     } 
    } 
} 

I CHINESEN JETZT suchen, damit ich weiß, das Problem ist "not_analyzed", WIE DER POST SAID.

Schließlich kann mir jeder sagen, wie man den Kartenwert "not_analyzed", ich hatte google und stackoverflow viele viele Male immer noch nicht die Antwort finden, lassen Sie mich wissen, wenn jemand helfen kann, vielen Dank.

Antwort

5

Eine Möglichkeit, dies zu erreichen, ist eine mappings.json Datei auf dem Build-Pfad zu erstellen (z yourproject/src/main/resources/mappings) und dann das Mapping verweist auf die @Mapping Anmerkung in Ihrer Klasse.

@Document(indexName = "your_index", type = "your_type") 
@Mapping(mappingPath = "/mappings/mappings.json") 
public class SomeObject{ 
    String id; 
    @Field(type=FieldType.Object, index=FieldIndex.not_analyzed) 
    Map<String, String> parameters; 
} 

In diesem Mapping-Datei, werden wir einen dynamic template hinzufügen, die die Subfelder Ihrer parameters hashmap Ziel wird und erklären sie not_analyzed String zu sein.

{ 
    "mappings": { 
    "your_type": { 
     "dynamic_templates": [ 
     { 
      "strings": { 
      "match_mapping_type": "string", 
      "path_match": "parameters.*", 
      "mapping": { 
       "type": "string", 
       "index": "not_analyzed" 
      } 
      } 
     } 
     ] 
    } 
    } 
} 

Sie müssen sicherstellen, dass your_index ersten und starten Sie Ihre Anwendung zu löschen, so dass es mit der richtigen Zuordnung neu erstellt werden kann.

+0

Entschuldigung, dass Sie Ihre Antwort nicht rechtzeitig annehmen, es funktioniert. Danke nochmal für deine Hilfe –