gpt4 book ai didi

elasticsearch - 在Elasticsearch中批量插入对象

转载 作者:行者123 更新时间:2023-12-02 22:26:52 24 4
gpt4 key购买 nike

我正在尝试创建索引,然后使用RestHighLevelClient对我的ES进行批量插入(代码在Kotlin中)。
批量插入代码为:

private fun insertEntity(entityList: List<Person>, indexName: String) {
var count = 0
val bulkRequest = BulkRequest()

entityList.forEach {
bulkRequest.add(IndexRequest(indexName).source(it,XContentType.JSON))
count++

if (count == batchSize) {
performBulkInsert(bulkRequest)
}
}
}
执行此操作时,出现异常提示: Limit of 1000 fields is crossed.在分析我的代码时,我觉得实现是错误的,因为:
bulkRequest.add(IndexRequest(indexName).source(it,XContentType.JSON))
source采用字符串类型,但我正在传递 Person (it)对象本身。因此,我认为这基于我的映射或其他原因导致了与1000个字段相关的问题。
不知道我的假设是否正确。如果是,我该如何实现批量插入?
编辑
索引创建:
private fun createIndex(indexName: String) {
val request = CreateIndexRequest(indexName)

val settings = FileUtils.readFileToString(
ResourceUtils.getFile(
ResourceUtils.CLASSPATH_URL_PREFIX + "settings/settings.json"), "UTF-8")

val mappings = FileUtils.readFileToString(
ResourceUtils.getFile(
ResourceUtils.CLASSPATH_URL_PREFIX + "mappings/personMapping.json"), "UTF-8")

request.settings(Settings
.builder()
.loadFromSource(settings, XContentType.JSON))
.source(mappings, XContentType.JSON)
restHighLevelClient.indices().create(request, RequestOptions.DEFAULT)

}
Mapping.json
请注意原件有16个字段。
{
"properties": {
"accessible": {
"type": "boolean"
},
"person_id": {
"type": "long"
},
"person_name": {
"type": "string",
"analyzer": "lower_keyword"
}
}
}
谢谢。

最佳答案

看起来您正在使用动态映射,并且由于在对文档建立索引时由于某些错误而导致最终在索引中创建了超过1000字段限制的新字段。
请查看是否可以使用静态映射或调试准备文档的代码并将其与映射进行比较,以查看其是否创建了新字段。
如果合理,请引用this SO答案以增加限制,或者使用静态映射或调试代码以弄清楚为什么要向Elasticsearch索引添加新字段。

关于elasticsearch - 在Elasticsearch中批量插入对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63150949/

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