Elasticsearch多字段聚合
2018-04-03 12:46:30
1145次阅读
0个评论
1,需求:
在分页查询的同时,返回所查询商品的类目和品牌的聚合信息
2,mapping:
这里需要注意的是brand_name如果设置为ik分词,聚合结果也会进行分词,导致结果不准确
可对brand_name进行multi_field设置,query时使用brand_name,agg时使用brand_name_agg
3,查询时需要注意如果分别统计两个不相关的字段,可设置aggregations下多个结果集,若统计有父子关系的字段,
例如某年级下某班级的学生个数,可使用subAggregation功能
查询:
在分页查询的同时,返回所查询商品的类目和品牌的聚合信息
2,mapping:
{
"item" : {
"properties" : {
"item_name" : {
"type" : "string",
"index" : "analyzed",
"analyzer" : "ik_smart"
},
"brand_name" : {
"type" : "multi_field",
"fields" : {
"brand_name" : {"type" : "string", "index" : "analyzed", "analyzer" :"ik_smart"},
"brand_name_agg" : {"type" : "string", "index" : "not_analyzed"}
}
},
"c_name" : {
"type" : "multi_field",
"fields" : {
"c_name" : {"type" : "string", "index" : "analyzed","analyzer" :"ik_smart"},
"c_name_agg" : {"type" : "string", "index" : "not_analyzed"}
}
}
}
}
}
这里需要注意的是brand_name如果设置为ik分词,聚合结果也会进行分词,导致结果不准确
可对brand_name进行multi_field设置,query时使用brand_name,agg时使用brand_name_agg
3,查询时需要注意如果分别统计两个不相关的字段,可设置aggregations下多个结果集,若统计有父子关系的字段,
例如某年级下某班级的学生个数,可使用subAggregation功能
查询:
{"from" : 0,
"size" : 20,
"query" : {
"bool" : {
"must" : {
"fuzzy" : {
"item_name" : {
"value" : "西门子"
}
}
}
}
},
"explain" : true,
"aggregations" : {
"brand_name.brand_name_agg" : {
"terms" : {
"field" : "brand_name.brand_name_agg",
"size" : 9999,
"order" : {
"_count" : "asc"
}
}
},
"c_name.c_name_agg" : {
"terms" : {
"field" : "c_name.c_name_agg",
"size" : 9999,
"order" : {
"_count" : "asc"
}
}
}
}
}
00
相关话题
- Elasticsearch Aggregation聚合统计
- Elasticsearch按照字段长度过滤
- java反射根据字段名读取值
- Mysql获取某个表的所有字段名
- Elasticsearch 6.3.0 SQL查询
- Elasticsearch score 评分计算
- elasticsearch清空索引缓存
- Elasticsearch使用索引别名
- ElasticSearch 6.0 乐观锁
- Elasticsearch 5.0 深分页
- Elasticsearch 6.0 性能调优
- Elasticsearch使用searchAfter深度分页
- ElasticSearch 6.0 Bulk批量操作
- ElasticSearch 6.0 搜索结果高亮
- elasticsearch经纬度范围查询