面试题答案
一键面试解决方案
-
ElasticSearch原理:
- ElasticSearch是一个分布式搜索引擎,索引是其存储数据的逻辑结构,文档是索引中的基本数据单元。在跨索引搜索时,ElasticSearch会并行地在各个指定的索引上执行搜索操作,然后合并结果。
- 对于聚合操作,如计算每个产品在不同地区的总销售金额,ElasticSearch使用桶(bucket)和指标(metric)的概念。桶用于对文档进行分组,比如按产品名称分组;指标用于在桶内进行数值计算,如计算销售金额的总和。
-
构建复杂URI结构: 假设索引名称分别为
index_region1
,index_region2
,index_region3
等,我们可以使用_all
特殊索引名称来跨所有索引搜索。
完整的URI示例(使用HTTP GET请求):
GET /_all/_search
{
"aggs": {
"product_sales": {
"terms": {
"field": "product_name.keyword",
"order": {
"total_sales_amount": "desc"
}
},
"aggs": {
"total_sales_amount": {
"sum": {
"field": "sales_amount"
}
}
}
}
},
"size": 0
}
/_all/_search
:/_all
表示跨所有索引进行搜索,_search
是执行搜索操作的端点。"aggs"
部分是聚合(aggregation)的定义:"product_sales"
是自定义的聚合名称。"terms"
聚合用于按product_name.keyword
字段对文档进行分组(keyword
类型适用于精确匹配和分组)。"order"
指定按total_sales_amount
指标降序排列。"total_sales_amount"
是另一个聚合,使用"sum"
指标计算每个产品分组内的sales_amount
字段总和。
"size": 0
表示我们不关心搜索命中的具体文档,只关心聚合结果。这样可以减少不必要的数据传输。