在Elasticsearch查询结果

时间:2017-04-19 09:59:33

标签: 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}]
}

P.S。 我使用的是Java API

1 个答案:

答案 0 :(得分:0)

我没有找到灵活的内置方式,所以我决定手动过滤。这是我的实施:

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);
}