我想使用最新的 java API Elasticsearch 类将特定字段定义为关键字类型。但我不知道该怎么做,也找不到它的例子。
我希望能够写出这样的东西:
ElasticsearchClient client = ....
client.putMappings(m -> m.etc...)
但我在 ElasticsearchClient 中找不到任何看起来可以让我放置一些映射的方法。
这是我对新的 java API 感到非常沮丧的事情。它非常流利,但没有很好的记录。我发现的大多数 ES 文档和示例都是用原始 JSON 对象来描述事物的。但我经常找不到文档和示例来展示如何使用最新的 java API 构建这些 JSON 对象。
今天我遇到了同样的问题,并反驳到查看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。
这似乎有效:
// 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));