Spring data elasticsearch 根据请求参数动态创建索引,percolator 支持并通过 Elasticsearch Operations 创建索引

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

我通读了https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#reference开始

我的要求

  1. 我想使用渗滤器。 spring data elasticsearch 有支持吗?尽管我知道渗透与索引相同(从技术上讲,从使用 spring data elasticsearch 的角度来看),但我在上面的链接中没有看到任何内容。所以我可以使用 spring data elasticsearch 的索引部分,但只需检查是否有特定于 percolator 的索引部分。
  2. 我想动态创建一个索引。我确实知道我可以使用 SpEL 模板表达式来实现这一点,如https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#elasticsearch.mapping.meta-model.annotations但我的情况略有不同,我将通过 RequestParam 获取索引名称作为 API 调用的一部分。因此,据我所知,这意味着我无法使用 SpEL 或尝试类似 https://stackoverflow.com/a/33520421/4068218
  3. 我发现我可以使用 ElasticsearchOperations 或 ElasticsearchRepository 来创建索引。由于#2(即通过请求参数的索引名称),我认为 ElasticsearchOperations 更适合,但我看到 IndexOperations 促进了 createMapping、createSettings,但不能同时促进两者。我也看到了 putMapping,但没有看到任何显示映射和设置的内容。我想要两者的原因是我想首先创建如下所示的东西
  "settings" : {
                "index" : {
                  "number_of_shards" : 1,
                  "number_of_replicas" : 0
                }
              },
            "mappings": {
                "properties": {
                  "message": {
                    "type": "text"
                  },
                  "query": {
                    "type": "percolator"
                  }
                }
              }

底线:- 如何使用 ElasticsearchOperations 创建具有映射和设置的索引(索引名称将通过请求参数动态化)?
非常感谢任何领导/帮助

java spring-boot elasticsearch spring-data-elasticsearch
1个回答
1
投票

首先非常感谢@P.J.Meisch。对您的两条评论都点赞以表谢意。

以下对我有用。以下可能会对其他人有所帮助

 Document mapping = Document.create().fromJson("""
                {
                "properties": {
                      "message": {
                        "type": "text"
                      },
                      "query": {
                        "type": "percolator"
                      }
                    }
                }""");
 Map<String, Object> settings = ImmutableMap.of( "number_of_shards" ,2,"number_of_replicas",1);
 elasticsearchOperations.indexOps(IndexCoordinates.of("whatever-indexname-you-need")).create(settings,mapping);
© www.soinside.com 2019 - 2024. All rights reserved.