Tag: elasticsearch

为什么spring-data-elasticsearch不使用Spring上下文中的objectmapper

我正在开发一个使用spring-data-elasticsearch进行数据存储的应用程序。 我也使用kotlin编写这个应用程序。 这有一些特殊的怪癖,一个是杰克逊需要杰克逊模块kotlin(摆脱无参数构造的问题)。 我也使用jackson-datatype-jsr310模块。 Spring引导足够好,可以从类路径中选择这些模块并自动注册它们。 我还将write-dates-as-timestamps选项设置为false。 然而,spring-data-elasticsearch似乎对此并不在意。 我想这是因为DefaultEntityMapper消息一个对象映射器,并没有使用从春天上下文。 我想知道为什么? 我通过提供一些额外的配置来确定它,以确保spring-data-elasticsearch使用从spring上下文中获得的objectmapper: @Configuration open class ElasticsearchConfig(val elasticsearchEntityMapper: ElasticsearchEntityMapper) { @Bean open fun elasticsearchTemplate(client: Client) = ElasticsearchTemplate(client, DefaultResultMapper(elasticsearchEntityMapper)) } @Component class ElasticsearchEntityMapper(val objectMapper: ObjectMapper) : EntityMapper { override fun mapToString(`object`: Any?) = objectMapper.writeValueAsString(`object`) override fun <T : Any?> mapToObject(source: String?, clazz: Class<T>?) = objectMapper.readValue(source, clazz) } 有没有更好/更简单的方法来确保spring-data-elasticsearch使用上下文中的objectmapper?

在Kotlin中,我如何整合Kovenant承诺和Elasticsearch异步响应?

我在我的Kotlin应用程序中使用Kovenant,我打电话给Elasticsearch,它有自己的异步API。 我宁愿使用承诺,但最好的我可以想出如下: task { esClient.prepareSearch("index123") .setQuery(QueryBuilders.matchAllQuery()) .execute().actionGet() } then { … } success { … } fail { … } 这使得Kovenant异步任务线程,然后Elasticsearch使用其池中的线程,然后actionGet()同步阻止Elasticsearch取回结果。 在阻塞其他人的时候产生新的线程似乎很愚蠢。 有没有一种方法可以更紧密地集成线程调度? 注意: 这个问题是由作者故意编写和回答的( 自我回答问题 ),所以在SO中共享有趣问题的解决方案。

Spring数据Elasticsearch与Kotlin数据类的脚本字段导致Jackson序列化问题

当试图从Elasticsearch获取查询结果并将其映射到使用@org.springframework.data.elasticsearch.annotations.ScriptedField批注的Kotlin数据类时,结果实例似乎只用脚本字段创建,而不是其他字段被同时获取,因此导致.MissingKotlinParameterException 。 查询是通过ElasticsearchRepository#search方法完成的,该方法随Spring Data Elasticsearch提供,下面是相关的代码片段: val searchQuery = NativeSearchQueryBuilder() .withQuery(geoDistanceQuery("location").point(53.0, 10.0).distance("100km")) .withScriptField(ScriptField("distance", Script(ScriptType.INLINE, "expression", "doc['location'].arcDistance(params.latitude, params.longitude)", emptyMap()))) .withFilter(boolQuery().must(existsQuery("title"))) .withSort(SortBuilders.geoDistanceSort("location", 53.0, 10.0).order(SortOrder.ASC)) .withPageable(PageRequest.of(0, 10)) .build() val nearby = eventRepository.search(searchQuery) 具有更多上下文的堆栈跟踪: Caused by: com.fasterxml.jackson.module.kotlin.MissingKotlinParameterException: Instantiation of [simple type, class de.nava.demo.events.model.Event] value failed for JSON property id due to missing (therefore NULL) value for creator parameter id which […]