如何使用新的 java api 放置 ElasticSearch 映射

问题描述 投票:0回答:2

我想使用最新的 java API Elasticsearch 类将特定字段定义为关键字类型。但我不知道该怎么做,也找不到它的例子。

我希望能够写出这样的东西:

ElasticsearchClient client = ....

client.putMappings(m -> m.etc...)

但我在 ElasticsearchClient 中找不到任何看起来可以让我放置一些映射的方法。

这是我对新的 java API 感到非常沮丧的事情。它非常流利,但没有很好的记录。我发现的大多数 ES 文档和示例都是用原始 JSON 对象来描述事物的。但我经常找不到文档和示例来展示如何使用最新的 java API 构建这些 JSON 对象。

java elasticsearch
2个回答
0
投票

今天我遇到了同样的问题,并反驳到查看Java客户端存储库中的测试代码,其中可能包含您正在寻找的内容的示例测试

client = ElasticsearchTestServer.global().client();

String index = "testindex";
Map<String, Property> fields = Collections.singletonMap("keyword", Property.of(p -> p.keyword(k -> k.ignoreAbove(256))));
Property text = Property.of(p -> p.text(t -> t.fields(fields)));
    
client.indices().create(c -> c
    .index(index)
    .mappings(m -> m
        .properties("id", text)
        .properties("name", p -> p
            .object(o -> o
                .properties("first", text)
                .properties("last", text)
            )
        )
    )
);

我面临的挑战是 MappingRequest 不接受除泛型属性以外的任何内容,而不是直接接受类型化属性,例如 DateProperty。


0
投票

这似乎有效:

// co.elastic.clients.elasticsearchElasticsearchClient client;

TypeMapping mappings = TypeMapping.of(mappingsBuilder -> mappingsBuilder
      // example of mapping for a single property, chain properties() for more
     .properties("type", type -> type.keyword(keyword -> keyword)));

client.indices().create(idxBuilder -> idxBuilder.index("myindex").mappings(mappings));
© www.soinside.com 2019 - 2024. All rights reserved.