gpt4 book ai didi

Springframwork 和 Elasticsearch 动态字段\属性名称

转载 作者:行者123 更新时间:2023-12-03 02:33:15 25 4
gpt4 key购买 nike

我看到了 Spring Boot 与 document annotation 的映射。 .使用 @Document 注释来定义索引使我有义务使用特定数量的字段和特定字段名称。
在我的应用程序中,用户定义了自己的字段,因此 @Document 不适合我的需求。

如何使用 Spring 数据实现特定索引的动态字段?

例子:

用户生成一些数据:

Map<String, String> data = new HashMap<>();
//new fields
data.put("oranges", "tasty");
data.put("apples", "baaa");
data.put("avocado", "ok");
// existing fields
data.put("totalFruits", 20);

并调用一个方法,让我们说:
void indexData(String indexName, Map<String, String> data)

输出将是:
  • 将 3 个字段添加到索引
  • 索引 indexName 中包含所有字段的新文档
  • 最佳答案

    请注意,链接的文档已有几年历史了。

    使用 Spring Data Elasticsearch,可以将不同类的对象(不仅仅是 Map s)索引到相同的索引,而不是使用 Repository 方法,而是使用 ElasticsearchOperations 的实现方法。界面。

    您可以使用 ElasticsearchOperations.index(IndexQuery query) 来实现此目的。适用于当前版本 3.2 之前的版本。从 4.0 开始,这将变为 DocumentOperations.index(IndexQuery, IndexCoordinates) .IndexQuery包含一个字段,该字段指定文档数据应存储到的索引名称。从 4.0 版本开始,第二个参数中的信息用于传递此信息。

    如果您以这种方式存储数据,请注意索引映射不是由 Spring Data Elasticsearch 创建的,您无法控制它。如果首先包含的文件

    data.put("count", 20)

    被存储,然后另一个文档被存储
    data.put("count", "twenty")

    你会得到一个错误,因为计数字段被自动映射到一个数值而不是一个字符串。
    或者,如果您存储两个不同类的对象,它们都具有同名但类型不同的属性,您将得到相同的错误。

    所以从技术上讲这是可能的,但我真的不建议以这种方式存储数据。

    关于Springframwork 和 Elasticsearch 动态字段\属性名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59477229/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com