我在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
答案 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);
}