当前位置: 首页 > 知识库问答 >
问题:

使用Java高级Rest客户端弹性搜索自定义创建索引

严阳夏
2023-03-14
createIndexWithCustomMappings(String indexName, String fieldsMapping){CreateIndexResponse createIndexResponse = client.admin().indices()
                .prepareCreate(index).setSettings(fieldsMapping).execute().get();}

我有一个在spring boot应用程序中创建弹性搜索索引的代码。目前使用的客户端是transport客户端,它现在根据弹性搜索文档进行折旧,现在被高级Rest客户端取代。

用于使用高级Rest客户端创建索引。我见过这个代码。

    CreateIndexRequest request = new CreateIndexRequest(indexName);
    CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);

这里的fieldsMapping是一个json文件,它包含有关analyzer、tokenizer和filter的详细信息,并作为字符串传递给这个方法。我无法在java rest高级客户端中找到方法来合并setSettings(fieldsMapping)。执行()。get()如上所述,使用transport client。

任何关于这个设置(字段映射)如何工作的想法java高级Rest客户端

共有1个答案

严柏
2023-03-14

您可以使用Elasticsearch chRestTemboard本身的实现。

使用Elasticsearch 6。x:

以下是使用设置创建索引的方式:

@Override
    public boolean createIndex(String indexName, Object settings) {
        CreateIndexRequest request = new CreateIndexRequest(indexName);
        if (settings instanceof String) {
            request.settings(String.valueOf(settings), Requests.INDEX_CONTENT_TYPE);
        } else if (settings instanceof Map) {
            request.settings((Map) settings);
        } else if (settings instanceof XContentBuilder) {
            request.settings((XContentBuilder) settings);
        }
        try {
            return client.indices().create(request, RequestOptions.DEFAULT).isAcknowledged();
        } catch (IOException e) {
            throw new ElasticsearchException("Error for creating index: " + request.toString(), e);
        }
    }

以下是更新索引映射的方式:

@Override
    public boolean putMapping(String indexName, String type, Object mapping) {
        Assert.notNull(indexName, "No index defined for putMapping()");
        Assert.notNull(type, "No type defined for putMapping()");
        PutMappingRequest request = new PutMappingRequest(indexName).type(type);
        if (mapping instanceof String) {
            request.source(String.valueOf(mapping), XContentType.JSON);
        } else if (mapping instanceof Map) {
            request.source((Map) mapping);
        } else if (mapping instanceof XContentBuilder) {
            request.source((XContentBuilder) mapping);
        }
        try {
            return client.indices().putMapping(request, RequestOptions.DEFAULT).isAcknowledged();
        } catch (IOException e) {
            throw new ElasticsearchException("Failed to put mapping for " + indexName, e);
        }
    }

使用Elasticsearch 7。x:

  1. 你需要创建一个变量IndexCoordinates.of("indexName")
  2. 从ElasticSearchTem板获取该索引的索引操作
  3. 通过像这样的index操作变量创建索引:
IndexOperations indexOperations = elasticsearchTemplate.indexOps(indexCoordinates);
        String indexSettings = "" //Pass json string here
        String mappingJson = "" //Pass json string here
        Document mapping = Document.parse(mappingJson);
        Map<String, Object> settings = JacksonUtil.fromString(indexSettings, new TypeReference<>() {});

        indexOperations.create(settings, mapping);
        indexOperations.refresh(); //(Optional) refreshes the doc count

这实际上取决于您使用的是哪个spring data elasticsearch。也可以随意查看文档:https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#new-特征

希望这对你的elasticsearch之旅有所帮助!请随意询问有关java实现的更多问题:)

 类似资料:
  • 通过以下命令,我可以查看弹性搜索部署的endpoint,并且从Postman那里没有任何问题:GET https://:@d97215aee2.us-east-1.aws.found.io:9243 我也可以使用邮递员的这个命令创建索引...将https://el弹力:4yqimxfosz9mxpgy1fj7t5bu@d97218f74f6d48489b355dd7d665aee2.us-east

  • 我正在尝试将我的弹性搜索(6.6.1)、spring boot(2.1.3)应用程序从Java8迁移到Java11。之前,我使用高级java rest客户端创建和搜索索引。因为存在一个问题(https://github.com/elastic/elasticsearch/issues/38299)在模块化高级rest客户端api时,我试图使用低级rest客户端,但无法获得任何搜索结果。 请看一些代

  • 这里有一个自定义api,可以使用传输客户端删除索引,使用admin删除import语句,并且工作正常。 我正在使用Java高级Rest客户端编写同样的代码,但在那里找不到合适的import语句。根据我所阅读的内容,admin不用于Java高级Rest客户端,因为它似乎已被弃用。 使用高级Rest客户端时应该使用新的导入。我可以用它创建索引,但找不到删除请求或响应的相同导入。 导入组织。elasti

  • 我正在使用java高级rest客户端在我的应用程序中集成elasticsearch,但无法创建索引 在某个地方,我发现要执行请求,我们需要使用index(请求)方法(我在代码中已注释),但它表明index(请求)方法已从RestHighLevelClient类型中弃用。 这是我的代码:

  • 我们不允许寻求书籍、工具、软件库等推荐的问题。你可以编辑这个问题,以便用事实和引用来回答。 我是弹性搜索的初学者,正在寻找将弹性搜索与Spring boot相结合的最佳方式。 我不确定使用以下哪一项:- > Spring数据弹性搜索 开玩笑 谢谢

  • 在es中搜索时,如何使用spring的rest模板或elasticsearch自己的高/低rest客户端,我左右为难。与spring rest模板相比,es客户端是否提供了HTTP连接池、性能等方面的任何优势。这两个模板中的哪一个在从服务器获取响应时花费的时间更少。请有人解释一下?