我在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/