提问者:小点点

Spring启动弹性搜索:创建索引时无法设置@字段注释


我对弹性搜索很陌生,我无法通过字段注释设置映射。我使用的是Spring data弹性4.3.4。我通过@Ssettings注解添加设置,这实际上是有效的。但是如果我将字段类型设置为Keyword,它不会更新,弹性会动态地将字段类型映射到文本。我的要求是添加一个规范化器来启用特定字段的字母排序。请在下面找到我的设置,我真的很感谢你的帮助。

配置:弹性搜索版本:“7.11.1”,Spring数据弹性4.3.4。

示例代码

@Document(indexName = "#{@environment.getProperty('elastic.index.prefix')}-test")

@设置(setingPath="/elasticsearch/analyzer. json")公共类ElasticTest{

@Id
String id;


@Field(type = FieldType.Keyword, normalizer="sort_normalizer")
private String name;

@Field
private String createdDate;


@Field(type=FieldType.Object)
private CustomerType customerType;

=============================================================================

所以一旦创建了索引,我就可以看到添加的设置

"creation_date" : "1664385255792",
    "analysis" : {
      "normalizer" : {
        "sort_normalizer" : {
          "filter" : [
            "lowercase",
            "asciifolding"
          ],
          "type" : "custom",
          "char_filter" : [ ]
        }
      },
      "analyzer" : {
        "custom_pattern_analyzer" : {
          "lowercase" : "true",
          "pattern" : """\W|_""",
          "type" : "pattern"
        }
      }
    },

映射:

      "name" : {
      "type" : "text",
      "fields" : {
        "keyword" : {
          "type" : "keyword",
          "ignore_above" : 256
        }
      }
    },

注意:由于我在本地工作,我必须多次删除并重新创建索引。我可以通过curl/kibana设置这些字段类型。

更新:这里我们通过以下方式创建索引:

if (!searchTemplate.indexOps(ElasticContract.class).exists()) {
                searchTemplate.indexOps(ElasticContract.class).create();
            }

我们还使用Elasticsearch chRepository进行查询。


共1个答案

匿名用户

索引和映射是如何创建的?

如果您使用Spring Data Elasticsearch存储库,那么如果应用程序启动时尚不存在带有设置和映射的索引,则将创建该索引。

如果您不使用存储库,而是使用Elasticsearch chOper,则需要自己创建索引:

  ElasticsearchOperations operations;

  IndexOperations indexOps = operations.indexOps(ElasticTest.class);
  indexOps.createWithMapping();

如果您不创建索引而只是插入一些数据,那么Elasticsearch将自动创建索引和映射。您显示的映射是String字段的典型自动创建映射。

您使用的@Field注释是正确的,我们在一个测试中有一个类似的设置来测试这种行为,请参阅https://github.com/spring-projects/spring-data-elasticsearch/blob/main/src/test/java/org/springframework/data/elasticsearch/core/index/MappingBuilderIntegrationTests.java#L126-L145