我正在使用弹性搜索 7.0。我有一个必须保存为弹性的模型。
当索引不存在时,我尝试将文档直接保存到弹性:
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);
一切正常,文档将保存到弹性文件中。
但我想要一个自定义分析器,我需要更改映射类型。
所以我尝试在保存任何文档之前设置索引和映射:
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.]
我该如何解决该错误?
并且创建索引和不是所有参数的映射的计划是否正确,然后使用比创建的参数更多的参数保存文档。那么弹性会将其他缺少的参数添加到映射中还是我必须在创建索引部分中设置完整的映射?