想要根据当前的搜索条件,查询返回该条件下的存在的字段,
尝试过对所有字段进行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
赞同来自:
所以如果要实现这个功能,也可以类似这种方式,在每个文档中新增一个字段,这个字段存储当前文档所有非空字段的名称,之后只需要对这个字段聚合即可满足这个功能。
缺点是增加了额外的存储空间