gpt4 book ai didi

java - 我们可以避免将所有字段都映射到springdata中用于Elasticsearch的实体类,因为json文档中有100多个字段吗?

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

我正在使用springdata API实现用于Elasticsearch(es)操作的spring-boot微服务。我在es中建立索引的文档很大,有多个字段(超过100个)。
有没有一种方法可以避免在Java中为Elasticsearch对象定义/硬编码实体类中的所有字段?
我的样本患者JSON可能像这样:

{
"key_1":"value_1",
"key_2":"value_2",
"key_3":"value_3",
.
.
.

"key_n":"value_n"
}

最佳答案

如果您可以使用略有不同的形式将数据存储在Elastcisearch中,则可以使用以下内容:
如下定义您的实体(为简洁起见,我省略了getter / setter):

@Document(indexName = "innerdata")
public class InnerDataEntity {
@Id
private String id;

@Field(type = FieldType.Object)
private List<InnerData> innerData;

static class InnerData {
@Field(type = FieldType.Text)
private String key;
private String value;

}
}
将其与Spring Data Elasticsearch Repository结合使用将创建具有以下映射的索引:
{
"innerdata": {
"mappings": {
"properties": {
"id": {
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
},
"type": "text"
},
"innerData": {
"properties": {
"key": {
"type": "text"
}
}
}
}
}
}
}
value属性是自动映射的,如果还需要搜索它们,则添加 FieldType.Text
然后,您可以通过定义如下存储库来使用键值进行搜索:
public interface InnerDataRepository extends ElasticsearchRepository<InnerDataEntity, String> {
SearchHits<InnerDataEntity> searchByInnerData_Key(String key);
}
并在 Controller 中使用它:
@GetMapping("/{key}")
public SearchHits<InnerDataEntity> allByKey(@PathVariable String key) {

return repository.searchByInnerData_Key(key);
}
Elasticsearch中存储的数据如下所示:
{
"hits": {
"hits": [
{
"_id": "1",
"_index": "innerdata",
"_score": 1.0,
"_source": {
"id": "1",
"innerData": [
{
"key": "key-1",
"value": "value-1"
},
{
"key": "key-2",
"value": "value-2"
}
]
},
"_type": "_doc"
},
{
"_id": "2",
"_index": "innerdata",
"_score": 1.0,
"_source": {
"id": "2",
"innerData": [
{
"key": "key-1",
"value": "value-1"
},
{
"key": "key-3",
"value": "value-3"
}
]
},
"_type": "_doc"
}
]
}
}
}

关于java - 我们可以避免将所有字段都映射到springdata中用于Elasticsearch的实体类,因为json文档中有100多个字段吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63780364/

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