映射注释的用途是什么,我需要吗?(Spring Data ElasticSearch)

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

我正在使用Spring Data ElasticSearch 3.1.0.RELEASEElasticSearch一起工作,并且我对ElasticSearch本身还很陌生,对此了解得不多。

Here(spring-data-elastic docs)我看到文档的映射(架构)是使用元数据(注释)以动态方式自动生成的,与Spring Data MongoDB中的动态生成方式非常相似,但是在我们的组织中,所有实体均已注释带有@Mapping批注,并引用反映其结构的JSON文档,因此对于每个文档实体-尽管所有实体都有各自的批注,但仍写入JSON文件。

样本类的一小段提示我在说什么

@Document(indexName = "sampleIndex", type = "sample", shards = 16, createIndex = false)
@Mapping(mappingPath = "/elasticsearch/mappings/sample.json")
public final class Sample {

    @Id
    private String id;

    @Field(type = FieldType.Long)
    private long sampleId;

    @Field(type = FieldType.Keyword)
    private SampleObject sampleObject;

    @Field(type = FieldType.Nested)
    private Map<String, String> data;

以及相应的/elasticsearch/mappings/sample.json文件

{
    "samples": {
        "mappings": {
            "sample": {
                "properties": {
                    "sampleId": {
                        "type": "long"
                    },
                    "sampleObject": {
                        "type": "string"
                    },
                    "data": {
                        "type": "nested"
                    },
....

[虽然我什至在(spring-data-elastic docs)中都没有看到任何注释,也没有任何有意义的JavaDocs,但是我可以理解此注释背后的整个想法。

无论如何,我仍然无法获得此注释的工作方式,用例是什么以及为什么需要它,从我的角度来看,我只是将其完全删除,因为可以基于其他模式自动生成模式Spring的注释。还是我错了?

与问题有关的其他要点:我也不知道:此映射JSON文件是否覆盖通过注释在实体中定义的结构?

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

ElasticsearchOperations接口具有方法putMapping(class<?>)。此方法可用于将索引映射写入索引。创建索引时,默认的非反应性存储库实现会执行此操作。

默认方法实现检查类上是否有@Mapping批注。如果是,则使用此映射定义。如果不存在此批注,则将检查类并检查属性中的@Field批注。

因此,在您的情况下,属性上的注释不用于编写索引映射。

我建议在类上使用属性,因为您更有可能在类中更改某些映射属性,而在json文件中忘记它。

例如,在您的代码中,将类sampleObject中的定义为keyword,但在映射中它是一个字符串。只看代码的人可能会错过不同的定义。

© www.soinside.com 2019 - 2024. All rights reserved.