发表时间:2022-03-21来源:网络
这是个人elasticsearch入门学习笔记。
内容:
1.elasticsearch的基础认识
2.了解es的基础增删改查
3.倒排索引,分词器简单了解
4.创建映射,添加数据,删除数据,更新数据,ID查询,关键词查询,分词查询,IK分词器,集群结构
5.java操作es,项目配置,jar包导入,定义索引库,java操作es的简单案例
springboot构架es的结构

Es和mysql字段对应

关系数据库 ⇒ 数据库 ⇒ 表 ⇒ 行 ⇒ 列(Columns)
Elasticsearch ⇒ 索引(Index) ⇒ 类型(type) ⇒ 文档(Docments) ⇒ 字段(Fields)
条件参数查询:

倒排索引


Es官方组件

需要的关键字:
id:Es的ID和mysql的ID要同步
Time:靠时间获取全量和曾量数据同步



对应的代码

创建映射:

添加文档(数据)

删除:文档

更新:文档,相当于在原来基础上覆盖

查询:
根据ID查询

根据关键词查询:查询关键字段

分词查询文档::在哪个域上执行查询,会进行分词

分词器

Ik分词器:ik_smart=最小单词为单位,ik_max_word=最大单词为单位,

集群:
一个索引库默认五片,组合在一起才是一个完整的索引库,每一片都一个复制节点

一个索引库的物理结构,主索引片和备份片不在一台服务器上,

集群:在一台设备上,建立多个es,把es名字统一,端口名细微改变如,9301,9302,9303等等,这样三台es启动,就自动建立起来了3个集群

java编写es 项目



定义mapping索引库

* must 相当于sql中and
* should 相当于sql中的or
* mustNot 不查xxx
* */
/**Bool bqb = .boolQuery();
bqb.mustNot(.termQuery("houseId", 1));
// 注意.termsQuery和.termQuery两个方法的不同
List itemIds = Lists.newArrayList(1L,2L,3L);
bqb.must(.termsQuery("itemId", itemIds)); // 相当于sql中 item_id in(1,2,3)
bqb.must(.termQuery("skuId","skuId003"));
AggregationBuilders
聚合查询,就是多条件比如分组,归类,统计,最大,最小,平均值

例如要计算每个球队的球员数,如果使用SQL语句,应表达如下:
select team, count(*) as player_count from player group by team;
ES的java api:
1
2
3
TermsBuilder teamAgg= AggregationBuilders.terms("player_count ").field("team");
sbuilder.addAggregation(teamAgg);
SearchResponse response = sbuilder.execute().actionGet();
例如要计算每个球队每个位置的球员数,如果使用SQL语句,应表达如下:
select team, position, count(*) as pos_count from player group by team, position;
ES的java api:
1
2
3
4
TermsBuilder teamAgg= AggregationBuilders.terms("player_count ").field("team");
TermsBuilder posAgg= AggregationBuilders.terms("pos_count").field("position");
sbuilder.addAggregation(teamAgg.subAggregation(posAgg));
SearchResponse response = sbuilder.execute().actionGet();
例如要计算每个球队年龄最大/最小/总/平均的球员年龄,如果使用SQL语句,应表达如下:
select team, max(age) as max_age from player group by team;
ES的java api:
1
2
3
4
TermsBuilder teamAgg= AggregationBuilders.terms("player_count ").field("team");
MaxBuilder ageAgg= AggregationBuilders.max("max_age").field("age");
Sbuilder .addAggregation(teamAgg.subAggregation(ageAgg));//根据团队下的年龄归类
SearchResponse response = sbuilder.execute().actionGet();
例如要计算每个球队球员的平均年龄,同时又要计算总年薪,如果使用SQL语句,应表达如下:
select team, avg(age)as avg_age, sum(salary) as total_salary from player group by team;
ES的java api:
1
2
3
4
5
6
TermsBuilder teamAgg= AggregationBuilders.terms("team");
AvgBuilder ageAgg= AggregationBuilders.avg("avg_age").field("age");
SumBuilder salaryAgg= AggregationBuilders.avg("total_salary ").field("salary");
sbuilder.addAggregation(teamAgg.subAggregation(ageAgg).subAggregation(salaryAgg));
SearchResponse response = sbuilder.execute().actionGet();
例如要计算每个球队总年薪,并按照总年薪倒序排列,如果使用SQL语句,应表达如下:
select team, sum(salary) as total_salary from player group by team order by total_salary desc;
ES的java api:
1
2
3
4
TermsBuilder teamAgg= AggregationBuilders.terms("team").order(Order.aggregation("total_salary ", false);
SumBuilder salaryAgg= AggregationBuilders.avg("total_salary ").field("salary");
sbuilder.addAggregation(teamAgg.subAggregation(salaryAgg));
SearchResponse response = sbuilder.execute().actionGet();
默认情况下,search执行后,仅返回10条聚合结果,如果想反悔更多的结果,需要在构建TermsBuilder 时指定size:
TermsBuilder teamAgg= AggregationBuilders.terms("team").size(15);
Aggregation结果的解析/输出
得到response后:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Map aggMap = response.getAggregations().asMap();
StringTerms teamAgg= (StringTerms) aggMap.get("keywordAgg");
Iterator teamBucketIt = teamAgg.getBuckets().iterator();
while (teamBucketIt .hasNext()) {
Bucket buck = teamBucketIt .next();
//球队名
String team = buck.getKey();
//记录数
long count = buck.getDocCount();
//得到所有子聚合
Map subaggmap = buck.getAggregations().asMap();
//avg值获取方法
double avg_age= ((InternalAvg) subaggmap.get("avg_age")).getValue();
//sum值获取方法
double total_salary = ((InternalSum) subaggmap.get("total_salary")).getValue();
//...
//max/min以此类推
}
荆门市民卡最新版(i荆门)下载v2.5.6 安卓手机版
67.08MB |资讯阅读
时光手帐官方版下载v6.3.8 安卓版
61.31MB |生活服务
皮皮手账手机版(改名时光手帐)下载v6.3.8 安卓版
61.31MB |系统工具
定格动画工作室app(stop motion studio)下载v25.08.8578 安卓官方中文版
122.84MB |系统工具
宝地贵池新闻客户端下载v1.0.7 安卓版
114.26MB |资讯阅读
杭州办事服务官方版(杭州城市大脑)下载v4.0.2 安卓版
145.38MB |商务办公
生态鹤岗app下载v4.5.4 安卓版
105.42MB |资讯阅读
妈妈来了月嫂手机版下载v9.8.92 安卓最新版
185.21MB |生活服务
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-02-15
2022-03-26
2022-02-14
屠魔传奇2手游下载v2.5.5 安卓版
其它手游trials frontier游戏下载v7.9.4 安卓版
其它手游密室逃脱求生系列1极地冒险内购破解版下载v700.00.13 安卓无限提示版
其它手游特技摩托前线内购破解版下载v7.9.4 安卓版
其它手游特技摩托前线免验证版下载v7.9.4 安卓无限钻石版
其它手游密室逃脱求生系列2极限密探手游下载v700.00.02 安卓版
其它手游印度汽车驾驶模拟器最新版下载v41 安卓版
其它手游密室逃脱求生系列2极限密探九游最新版下载v700.00.02 安卓版
其它手游密室逃脱生存模拟游戏下载v2.0.2 安卓版
其它手游