я использую elasti c search 7.0. У меня есть модель, которую нужно сохранить в elasti c.
. Если индекс не существует, я пытаюсь сохранить документы непосредственно в elasti c:
final IndexRequest indexRequest = new IndexRequest("seminar_map", "seminar", id)
.source(new Gson().toJson(object), XContentType.JSON);
indexRequest.id(id);
final IndexResponse indexResponse = client.index(indexRequest, RequestOptions.DEFAULT);
* 1005. * Все работает отлично, и документы будут сохранены в elasti c.
Но я хочу иметь собственный анализатор и мне нужно изменить типы отображения.
Поэтому я попытался установить индекс и отображение перед сохранением любых документов:
try {
CreateIndexRequest request = new CreateIndexRequest(index);
request.settings(Settings.builder()
.loadFromSource(Strings.toString(jsonBuilder()
.startObject()
.startObject("analysis")
.startObject("analyzer")
.startObject("case_insensitive_analyzer")
.field("tokenizer", "keyword")
.field("type", "custom")
.field("filter", new String[]{"lowercase"})
.endObject()
.endObject()
.endObject()
.endObject()), XContentType.JSON)
);
XContentBuilder builder = XContentFactory.jsonBuilder();
builder.startObject();
{
builder.startObject("properties");
{
builder.startObject("seminar_nummer");
{
builder.field("analyzer", "case_insensitive_analyzer");
}
builder.endObject();
}
builder.endObject();
}
builder.endObject();
request.mapping("_doc",builder);
return client.indices().create(request, RequestOptions.DEFAULT);
Но я получаю ошибку:
Elasticsearch exception [type=illegal_argument_exception, reason=The mapping definition cannot be nested under a type [_doc] unless include_type_name is set to true.]
Как я могу исправить эту ошибку?
И Правильно ли создать индекс и отображение с не всеми параметрами, а затем сохранить документы с большим количеством параметров, чем создано. Так добавит ли elasti c другие отсутствующие параметры в сопоставления или мне нужно установить полное сопоставление в части создания индекса?