首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弹性搜索7高级客户端创建索引与映射

弹性搜索7高级客户端创建索引与映射
EN

Stack Overflow用户
提问于 2020-02-05 13:05:38
回答 3查看 4.4K关注 0票数 0

我使用弹性搜索7.0。我有一个模型,必须保存到弹性。

当索引不存在时,我尝试将文档直接保存为弹性文档:

代码语言:javascript
复制
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);

一切正常,文件将保存为弹性文件。

但是我想要一个自定义分析器,我需要改变映射类型。

因此,我尝试在使用以下方法保存任何文档之前设置索引和映射:

代码语言:javascript
复制
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);

但我知道错误是:

代码语言:javascript
复制
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.]

我怎样才能纠正这个错误?

并且,计划是否正确:使用并非所有参数创建索引和映射,然后保存具有比创建更多参数的文档。那么弹性是否会将其他缺失的参数添加到映射中,还是必须在创建索引部分中设置完整的映射?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-02-05 18:23:05

错误来自您正在创建的JSON中的_doc,弹性抱怨是因为

从这里两个选项:

  1. include_type_name=true添加到URL中

  1. 将这行request.mapping("_doc",builder);替换为request.source(builder);

查看文档以获得更多详细信息:

  1. 类型 (注意6.8和7.x之间的差异)
  2. https://www.elastic.co/guide/en/elasticsearch/client/java-rest/master/java-rest-high-put-mapping.html#CO385-1
票数 1
EN

Stack Overflow用户

发布于 2020-02-05 20:13:26

类型在弹性7.x中被废弃,并将在未来的弹性版本中被删除。将request.mapping("_doc",builder)更改为request.mapping(builder)应该有效。

对于第二个问题,是的弹性搜索将添加在映射中在保存文档时没有提到的缺失字段。

票数 0
EN

Stack Overflow用户

发布于 2020-02-06 08:52:41

我还尝试用设置和映射部分分隔create索引。create +设置运行良好。

但是,添加映射的步骤不起作用:

代码语言:javascript
复制
final PutMappingRequest requestMapping = new PutMappingRequest("seminar_map");

            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();
            requestMapping.source(builder);

            client.indices().putMapping(requestMapping, RequestOptions.DEFAULT);

Dies gibt aber leider den Fehler:org.elasticsearch.action.ActionRequestValidationException: Validation Failed: 1: mapping type is missing;

但是,当iam向请求:requestMapping.type("_doc")添加类型时,它会抛出异常

代码语言:javascript
复制
Elasticsearch exception [type=illegal_argument_exception, reason=Types cannot be provided in put mapping requests, unless the include_type_name parameter is set to true.]

所以它不适用于类型,没有类型也不能工作:-D

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60076486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档