首页 > 编程知识 正文

elasticsearch怎么用,elasticsearch原理

时间:2023-05-04 14:36:24 阅读:149197 作者:2304

目录

一.聚合索引

1.bucket和metric概念

2 .操作示例

二. nested object

1 .问题

2 .原因

3 .个案

三.索取报酬

另一方面,聚合索引1.bucket和metric概念bucket是聚合检索时的数据组。

metric是对一个bucket数据执行的统计分析。

模拟sql、bucket类似于group by,metric类似于sum、count等聚合语法。

2 .操作示例

首先添加一些数据。

put/cars2{ ' mappings ' : { ' properties ' : ' price ' : { ' type ' : ' long ' },' color ' : { ' types ' ' model ' : { ' type ' : ' keyword ' }、' sold _ date ' : { ' type ' type ' 3360 }、' sold _ date ' 3360 ' rd ' analyzer ' : ' ik _ max _ word ' } post/cars2/_ bulk { ' index } ' brand ' : '大佬',' model': '大佬' remark': '大步中立车' }{'} 'brand': '大步',' model': '大步速腾',' sold _ date ' 3360 ' 2021-09-09 “model': '标志508 '、' sold_date':'2021-07-13 '、' remark': '标志品牌全球上市车型' } { ' brand ' 330 } ' sold_date':'2021-06-13 ',' remark': '比较大的紧凑型车' }{ 'brand': '大家伙',' model': ' “remark': '大佬最痛心的汽车' }{ 'brand': '奥迪',' model': '奥迪A4 ',' sold _ date ' 3360 ' 2021-} ' model': '奥迪A4 ',' sold_date':'2021-03-13 ',' remark': '政府用车' }{'inning}

GET /cars2/_search{ 'size': 0,' aggs ' : { ' group _ by _ color ' : } ' terms ' : { ' field ' 366660

)2)统计差异co

lor汽车的平均价格

先进行一次color分组,在进行一次价格聚合,套娃了

GET /cars2/_search{ "size": 0, "aggs": { "group_by_color": { "terms": { "field": "color", "order": { "avg_by_price": "asc" } }, "aggs": { "avg_by_price": { "avg": { "field": "price" } } } } }}

(3)统计不同color不同brand中车辆的平均价格

GET /cars2/_search{ "size": 0, "aggs": { "group_by_color": { "terms": { "field": "color", "order": { "avg_by_price_color": "asc" } }, "aggs": { "avg_by_price_color": { "avg": { "field": "price" } }, "group_by_brand": { "terms": { "field": "brand", "order": { "avg_by_price_brand": "desc" } }, "aggs": { "avg_by_price_brand": { "avg": { "field": "price" } } } } } } }}

 (4)统计不同color中的最大和最小价格,总价

GET /cars2/_search{ "size": 0, "aggs": { "group_by_color": { "terms": { "field": "color" }, "aggs": { "max_price": { "max": { "field": "price" } }, "min_price": { "min": { "field": "price" } }, "suum_price": { "sum": { "field": "price" } } } } }}

二、nested object 1.问题

我们查询地址时,有两条数据,省市为上海,浦东。江苏,扬州。

然后使用:

bool.must.match.address.province="上海"

bool.must.match.address.city="扬州"

事实上应该一个都查询不出来,但是他却都能查出来,这是不对的

2.原因

普通的数组在es中会被扁平化处理,即如果字段需要分词,会将分词数据保存在对应字段中,类似于每一个字段都用or来查询。

简单理解,nested object就是数组的精确匹配

nested object数据类型es在保存的时候不会有扁平化处理。

3.案例

先创建nested格式数组:

PUT /user_index{ "mappings": { "properties": { "login_name":{ "type": "keyword" }, "age":{ "type": "short" }, "address":{ "type": "nested", "properties": { "province":{ "type":"keyword" }, "city":{ "type":"keyword" }, "street":{ "type":"keyword" } } } } }}

设置数据:

PUT /user_index/_doc/1{ "login_name":"jack", "age":"25", "address":[ { "province":"北京", "city":"北京", "street":"aaa路" }, { "province":"天津", "city":"天津", "street":"bbb路" } ]}PUT /user_index/_doc/2{ "login_name":"rose", "age":"21", "address":[ { "province":"河北", "city":"廊坊", "street":"ccc路" }, { "province":"天津", "city":"天津", "street":"ddd路" } ]}

查询 :

GET /user_index/_search{ "query": { "bool": { "must": [ { "nested": { "path": "address", "query": { "bool": { "must": [ { "match": { "address.province": "北京" } }, { "match": { "address.city": "北京" } } ] } } } } ] } }}

三、打赏请求

如果本篇博客对您有所帮助,打赏一点呗,谢谢了呢~

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。