gpt4 book ai didi

java - 使用 java 客户端 6.5 插入对象

转载 作者:行者123 更新时间:2023-12-02 23:10:00 26 4
gpt4 key购买 nike

我想使用 java 高级别的客户端插入一个对象。

我的映射如下:

"images":{
"type":"nested",
"properties":{
"name":{
"type":"text"
},
"url":{
"type":"text"
}
}
}

和java代码:

//productDb.getImages() returns ArrayList of type Image: with attributes "name" and "url"


productToIndex.put("images", new Gson().toJson(productDb.getImages()));
IndexRequest indexRequest = new IndexRequest(ProductIndex.PRODUCT_INDEX, ProductIndex.TYPE)
.source(productToIndex, XContentType.JSON);
try {
restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
} catch (Exception e) {
logger.error("Data access error occured the entity persistence...", e);
throw new Exception(e);
}

错误是:

ElasticsearchStatusException[Elasticsearch 异常 [type=mapper_parsing_exception, reason=object mapping for [images] 试图将字段 [images] 解析为对象,但找到了具体值]]

具体值:
images -> [{"name":"Capture.PNG","url":"/api/trader/files/2132132/Capture.PNG"},{"name":"payement.jpg","url":"/api/trader/files/31231321/payement.jpg"}]

==> 对我来说似乎还可以,如果我用 new Arraylist<>(); 替换 productDb.getImages() ,我无法理解为什么它会返回异常;它工作正常(索引值为:“图像”:[])

我找不到如何使用 java 索引数组对象的示例,有解决方案吗?

谢谢。

最佳答案

如果您注意到 ES 期望您的 JSON 格式和您发送有效负载的格式有所不同。

索引嵌套文档的正确格式

{
"images": [ --> note image array
{
"name": "opster.PNG",
"url": "/api/trader/files/2132132/Capture.PNG"
},
{
"name": "data.jpg",
"url": "/api/trader/files/31231321/payement.jpg"
}
]
}

您的 java 代码生成的 JSON,请注意没有图像键
{
"name": "Capture.PNG",
"url": "/api/trader/files/2132132/Capture.PNG"
},
{
"name": "payement.jpg",
"url": "/api/trader/files/31231321/payement.jpg"
}

由于 Elasticsearch 无法找到 images key 而你的不是有效的 JSON 数组,Elasticsearch 抛出错误:

解决方案:

请发送开头提到的 JSON,然后使用下面的代码将其转换为正确的格式。
public void saveToEs(NestedImages nestedImages) throws IOException {
ObjectMapper Obj = new ObjectMapper();
final String images = Obj.writeValueAsString(nestedImages);
final IndexRequest indexRequest = new IndexRequest("nestedimage")
.source(images, XContentType.JSON);
IndexResponse indexResponse = client.index(indexRequest, RequestOptions.DEFAULT);

}

nested data type index def and indexing example 的重要链接和 REST high-level indexing java code .

关于java - 使用 java 客户端 6.5 插入对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61353665/

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