当前位置: 首页 > 知识库问答 >
问题:

映射注释有什么用,我需要它吗?(Spring Data ElasticSearch)

金坚
2023-03-14

在这里(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的其他注释自动生成。还是我错了?

与问题相关的其他要点:我也不确定:这个映射JSON文件是否通过注释覆盖了实体中定义的结构?

共有1个答案

蒋芷阳
2023-03-14

ElasticSearchOperations接口有一个方法putMapping(class )。此方法可用于将索引映射写入索引。默认的非反应性存储库实现在创建索引时执行此操作。

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

因此,在您的示例中,属性上的注释不用于编写索引映射。

 类似资料:
  • 好的,下面是一个简单的例子: 我有一个抽象超类,定义如下: 我的所有类都继承自它。一个例子可能是: 中的属性是否需要具有? 有没有我都试过了,似乎没有什么不同。但我只是害怕我错过了什么。 编辑感谢所有的快速答案。 一位同事还向我指出了jpalace.org上的JPA教程,特别是关于ORM和JPA概念的页面,其中有以下部分: 非实体超类 与映射超类类似,非实体超类不能用于查询。忽略非实体超类中存在的

  • 问题内容: 我有一个将对象保存到数据库的EJB。在我看到的一个示例中,一旦保存了此数据(EntityManager.persist),就会调用EntityManager.flush();。为什么我需要这样做?我要保存的对象未附加,以后在该方法中也不会使用。实际上,一旦保存,该方法就会返回,并且我希望资源会被释放。(示例代码也在remove调用上执行此操作。) 问题答案: 调用将强制数据立即被持久保

  • 为什么Rust不能完全推断其变量的所有权?为什么需要注释?

  • 我读了这篇问答和Cocoacasts博文,我完全理解什么是< code>@escaping注释。 但老实说,我不明白我们为什么需要它。 上述Cocoacasts博客文章指出: 默认情况下,使闭包不转义有几个好处。最明显的好处是性能和编译器优化代码的能力。如果编译器知道闭包是非转义的,它可以处理内存管理的许多细节。 但是,Swift编译器可以确定<code>转义 这也意味着您可以在非转义闭包中使用s

  • 我正在学习Spring框架,但我不能理解注释的确切含义以及应该对哪些类进行注释。在Spring Boot文档中,说应用程序类应该是class。 Spring Boot支持基于Java的配置。虽然可以使用XML源调用SpringApplication.run(),但我们通常建议您的主要源是@Configuration类。 在尝试了解时,我发现用注释类表明Spring IoC容器可以使用该类作为bea

  • 我有一个JSP登录页面,可以调用login action类。我使用的是Struts注释,而不是到映射,一切正常。我随机尝试了一些新东西,所以我从action类和struts中删除了所有注释。xml还没有映射到我的