elasticsearch - 在Elasticsearch中批量插入对象

标签 elasticsearch elasticsearch-7

我正在尝试创建索引,然后使用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/

相关文章:

elasticsearch - 使用参数直接放置过滤器会导致错误

elasticsearch - 我无法在没有属性的Elasticsearch中进行查询。<字段名称>

java - 如何获取使用 Java API 客户端 (7.16) 构建的 ElasticSearch 查询/请求的 json 表示形式?

elasticsearch - Elasticsearch预处理,以将空字段删除为摄取的一部分

elasticsearch - 过滤要显示的字段,嵌套字段呢?

elasticsearch - 您可以在Elasticsearch中索引无法搜索的字段吗?

java - 使用 Elasticsearch 7 java api 使用 Where 语句进行部分查询

elasticsearch - Elasticsearch 7.7 版本中跨多个索引的查询

elasticsearch - 使用NEST的ElasticSearch中的衰变函数

elasticsearch - indexing.index_total在elasticsearch的index/_stats端点中是什么意思。