java - 在Elasticsearch查询结果中隐藏一些数组元素

标签 java elasticsearch

我在Elasticsearch 2.4中索引对象,其中字段之一是其他对象的数组,例如,如下所示:

{
 A : 1,
 B : [{BB : 1},{BB : 2},{BB : 4},{BB : 5}]
}

是否可以查询Elasticsearch并应用过滤器以隐藏一些数组的 B 值,例如,隐藏BB小于3的值,这样结果将是
{
 A : 1,
 B : [{BB : 4},{BB : 5}]
}

附言
我正在使用Java API

最佳答案

我没有找到一种灵活的内置方法,因此我决定手动进行过滤。这是我的实现:

SearchResponse resp = request.execute().actionGet();
for (SearchHit hit : resp.getHits().getHits()) {
    Map<String, Object> source = hit.getSource();

    transformHitSource(source); // a method where you work with a map and can modify it as you want


    XContentBuilder xContentBuilder = jsonBuilder().startObject();

    for (Map.Entry<String, Object> entry : source.entrySet()) {
        xContentBuilder.field(entry.getKey(), entry.getValue());
    }
    BytesReference bytes = xContentBuilder.endObject().bytes();
    ((InternalSearchHit) hit).sourceRef(bytes);
}

关于java - 在Elasticsearch查询结果中隐藏一些数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43492390/

相关文章:

java - 从 Spring Boot 1.4 应用程序导入 Maven 依赖项

elasticsearch - ElasticSearch上的版本冲突

elasticsearch - Elasticsearch 中的字段和属性有什么区别?

regex - Elasticsearch-匹配十六进制的固定位数

java - Android 上丢失 UDP 套接字数据包

java - 理解equals方法

elasticsearch - Logstash错误:由于最终映射将具有超过1种类型,因此拒绝将映射更新更新为[db]:[meeting_invities, session 室“}}}}

java - Elastic Search - Spark 中的多个字段作为映射 ID

java - 如何在获得可比性能的同时在 Java8 中进行 monadicaly 编程?

java - GLFW 引擎和主线程问题 IntelliJ