Problem: Wie ein Index aus einer JSON-DateiElasticsearch Java API addMapping() und setSettings() Nutzung
Die JSON-Datei enthält eine Definition für den de_brochures
Index verwendet erstellen. Es definiert auch einen Analysator de_analyzer
mit benutzerdefinierten Filtern, die von dem jeweiligen Index verwendet werden. Da der Json mit curl und Sense arbeitet, gehe ich davon aus, dass ich die Syntax anpassen muss, um mit der Java API zu arbeiten.
Ich möchte nicht XContentFactory.jsonBuilder() verwenden, da der JSON aus einer Datei stammt!
Ich habe die folgende JSON-Datei meine Zuordnung von erstellen und Einstellungen festlegen:
Sense Verwendung mit PUT/indexname es einen Index aus dieser schafft.
{
"mappings": {
"de_brochures": {
"properties": {
"text": {
"type": "string",
"store": true,
"index_analyzer": "de_analyzer"
},
"classification": {
"type": "string",
"index": "not_analyzed"
},
"language": {
"type": "string",
"index": "not_analyzed"
}
}
}
"settings": {
"analysis": {
"filter": {
"de_stopwords": {
"type": "stop",
"stopwords": "_german_"
},
"de_stemmer": {
"type": "stemmer",
"name": "light_german"
}
},
"analyzer": {
"de_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"de_stopwords",
"de_stemmer"
]
}
}
}
}
}
Als das oben nicht mit addMapping() allein funktionierte ich es in zwei separate Dateien aufgeteilt versucht (Ich erkannte, dass ich die "mappings":
und "settings":
Teil zu entfernen, hatte):
------ Mapping json ------
{
"de_brochures": {
"properties": {
"text": {
"type": "string",
"store": true,
"index_analyzer": "de_analyzer"
},
"classification": {
"type": "string",
"index": "not_analyzed"
},
"language": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
------- Settings json --------
{
"analysis": {
"filter": {
"de_stopwords": {
"type": "stop",
"stopwords": "_german_"
},
"de_stemmer": {
"type": "stemmer",
"name": "light_german"
}
},
"analyzer": {
"de_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"de_stopwords",
"de_stemmer"
]
}
}
}
}
Diese ist mein Java-Code zum Laden und Hinzufügen/Festlegen der JSON.
CreateIndexRequestBuilder createIndexRequestBuilder = client.admin().indices().prepareCreate(index);
// CREATE SETTINGS
String settings_json = new String(Files.readAllBytes(brochures_mapping_path));
createIndexRequestBuilder.setSettings(settings_json);
// CREATE MAPPING
String mapping_json = new String(Files.readAllBytes(brochures_mapping_path));
createIndexRequestBuilder.addMapping("de_brochures", mapping_json);
CreateIndexResponse indexResponse = createIndexRequestBuilder.execute().actionGet();
Es ist nicht mehr Beschwerde über die Struktur der Zuordnungsdatei aber es funktioniert nicht jetzt mit dem Fehler:
Caused by: org.elasticsearch.index.mapper.MapperParsingException: Analyzer [de_analyzer] not found for field [text]
Bitte fügen Sie die Lösung nicht zu der Frage hinzu. Lösungen sind keine Fragen. Lösungen sind Antworten. Stackoverflow ermutigt Sie, Ihre Fragen selbst zu beantworten, wenn Sie Lösungen finden. Aber bitte tu das in einer Antwort. Das Bearbeiten der Frage, um die Lösung einzuschließen, verwirrt nur die Leser. Vielen Dank! – Vogel612