想要根据当前的搜索条件,查询返回该条件下的存在的字段,
尝试过对所有字段进行exists搜索来判断是否存在,但是数据量大的时候查询时间较长。
有没有类似于对类型分桶,查询所有字段的方法?如下
比如索引myindex里有两条数据,类型是test
{"a":1, "b":2} 和 {"a":2, "c":3}
那么myindex的mapping结构是包括3个字段的,如下
尝试过对所有字段进行exists搜索来判断是否存在,但是数据量大的时候查询时间较长。
有没有类似于对类型分桶,查询所有字段的方法?如下
{
"aggs": {
"type": {
"terms": {
"field": "_type"
},
"aggs": {
"field_list": {}
}
}
}
}
补充一下场景:
比如索引myindex里有两条数据,类型是test
{"a":1, "b":2} 和 {"a":2, "c":3}
那么myindex的mapping结构是包括3个字段的,如下
{"mappings": {
"test": {
"properties": {
"a": {
"type": "long"
},
"b": {
"type": "long"
},
"c": {
"type": "long"
}
}
}
}
}
如果这个时候我们改变搜索条件,a=1,我希望能够返回字段名是a和b,如果a=2,希望能够返回a和c字段
3 个回复
huigy
赞同来自:
laoyang360 - 《一本书讲透Elasticsearch》作者,Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net
赞同来自:
Inchapter
赞同来自:
所以如果要实现这个功能,也可以类似这种方式,在每个文档中新增一个字段,这个字段存储当前文档所有非空字段的名称,之后只需要对这个字段聚合即可满足这个功能。
缺点是增加了额外的存储空间