Проблема: Как создать индекс из файла JSON, используяElasticsearch Java API addMapping() и setSettings() использование
Файл JSon содержит определение индекса de_brochures
. Он также определяет анализатор de_analyzer
с пользовательскими фильтрами, которые используются соответствующим индексом. Поскольку json работает с curl и Sense, я предполагаю, что мне нужно адаптировать синтаксис для работы с java API.
Я не хочу использовать XContentFactory.jsonBuilder(), поскольку json происходит из файла!
У меня есть следующий JSon файл, чтобы создать свое отображение и установить параметры:
Использование Sense с PUT/IndexName это создать индекс от этого.
{
"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"
]
}
}
}
}
}
Как выше не работает с addMapping() я один пытался разбить его на две отдельные файлы (я понял, что мне пришлось удалить "mappings":
и "settings":
часть):
------ 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"
]
}
}
}
}
Это это мой код java для загрузки и добавления/установки 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();
Там больше нет жалоб о структуре файла отображения, но теперь он терпит неудачу с ошибкой:
Caused by: org.elasticsearch.index.mapper.MapperParsingException: Analyzer [de_analyzer] not found for field [text]
Пожалуйста, не добавляйте решение вопроса. Решения не являются вопросами. Решения - это ответы. Stackoverflow поощряет самостоятельное отвечать на ваши вопросы, когда вы находите решения. Но, пожалуйста, сделайте это в ответ. Редактирование вопроса для включения решения просто путает читателей. Благодаря! – Vogel612