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

Spring Data Elasticsearch(4.x)-在_source中使用@id forces id字段

昝光临
2023-03-14

以前我们有这样的域对象:

import org.springframework.data.annotation.Id;

public ESDocument {
    @Id
    private String id;

    private String field1;

    @JsonIgnore
    public String getId() {
        return id;
    }

    public String getField1() {
        return field1;
    }

从而在ES中生成了如下文档:

{
  "_index" : "test_index",
  "_type" : "_doc",
  "_id" : "d5bf7b5c-7a44-42f9-94d6-d59fe3988482",
  "_score" : 1.0,
  "_source" : {
    "field1" : "blabla"
  }
}

请注意:

    null
{
  "_index" : "test_index",
  "_type" : "_doc",
  "_id" : "d5bf7b5c-7a44-42f9-94d6-d59fe3988482",
  "_score" : 1.0,
  "_source" : {
    "id": "d5bf7b5c-7a44-42f9-94d6-d59fe3988482",
    "field1" : "blabla"
  }
}
    null

[1]-https://spring.io/blog/2020/05/27/what-s-new-in-spring-data-elasticsearch-4-0

共有1个答案

昝存
2023-03-14

问题1:

要省略_source中的id字段,通常使用@transient注释,但正如您所写的,这对id属性不起作用。瞬态特性在Spring数据模块中被忽略(不仅仅是Spring数据Elasticsearch)。

但是您可以使用org.springframework.data.annotation.ReadOnlyProperty注释:

@Id
@ReadOnlyProperty
private String id;

当然不是不正确,但你发现有问题。我们在存储它的时候总是考虑整个实体,所以我们从来没有想过不写ID。严格地说,这不是必需的,您说得对,因为我们总是将id和source一起放回_id字段中,所以我们可以很容易地将实体放回一起,但我们从来没有认为这是必需的特性。

注:

当您查看ES索引中的数据时,您会发现使用MappingElasticSearchConverter编写了一个名为_class的附加_source字段,其中包含实体类的名称(或定义的别名)。这允许映射泛型;要了解更多信息,请查看文档--以防您想知道这是从哪里来的。

 类似资料:
  • 如何使用spring data-elasticsearch实现这一点?

  • 问题内容: 使用Elasticsearch 1.4.3 我正在建立一种“报告”系统。客户可以选择要在结果中返回的字段。 在90%的情况下,客户端永远不会选择所有字段,因此我认为可以在映射中禁用_source字段以节省空间。但是后来我得知 不返回字段。 因此,我假设我必须为每个字段使用“ store”:true。从我阅读的内容来看,这对于搜索来说会更快,但是我认为从空间角度来看,它与_source相

  • 问题内容: 试图通过easy_install或pip安装psycopg2,并且终端卡在xcrun和lipo之间的循环中。 它在xcrun和lipo之间反弹,并永久卡在此循环中。希望能对此有一些见解。 我使用的是最新版本的OS X Mavericks 10.9。 问题答案: 一个更合适的解决方法是: 原因:xfx的修复程序可能无法在将来的Xcode版本中使用xcode-select来选择您的工具链。

  • 问题内容: 我正在运行一个简单的查询,如下所示: 问题在于,一旦引入,我将不再获得结果。 我努力了: 和 但是它们没有任何区别。除了之外,还有其他方法可以退货吗? 问题答案: 在数组中,使其加载:

  • 为什么比快?我使用的是CPython 3.5.2。 我试着改变我提升的幂,看看它是怎么做的,例如,如果我提升x的10或16的幂,它会从30跳到35,但如果我提升10.0作为浮动,它只是在24.1~4左右移动。 我想这和浮点转换和2次方有关,但我真的不知道。

  • 我正在使用elasticsearch javascript库,正在努力找出如何只返回源对象中的内容。。。我这样提取数据: 但我并没有得到唯一的消息来源。。。如果我将更改为