有哪些做PPT背景网站,国家企业信用信息公示系统官网全国,做网站一般用什么几号字,家用电脑做网站能备案Elasticsearch集群聚合、集群搭建 RestClient查询所有高亮算分控制 数据聚合DSL实现Bucket聚合DSL实现Metrics聚合RestAPI实现聚合 拼音分词器如何使用拼音分词器#xff1f;如何自定义分词器#xff1f;拼音分词器注意事项#xff1f; 自动补全数据同步集群搭建ES集群结构创… Elasticsearch集群聚合、集群搭建 RestClient查询所有高亮算分控制 数据聚合DSL实现Bucket聚合DSL实现Metrics聚合RestAPI实现聚合 拼音分词器如何使用拼音分词器如何自定义分词器拼音分词器注意事项 自动补全数据同步集群搭建ES集群结构创建es集群集群状态监控创建索引库1利用kibana的DevTools创建索引库2利用cerebro创建索引库 查看分片效果ES集群中的节点角色ES脑裂ES集群的分布式存储ES集群的分布式查询ES集群的故障转移 RestClient
查询所有
void testMatchAll() throws IOException {//1.准备RequestSearchRequest request new SearchRequest(hotel);//2.准备DSLrequest.source().query(QueryBuilders.matchAllQuery());//3.发送请求SearchResponse response restClient.search(requ est , RequestOptions.DEFAULT);System.out.println(response);}高亮
高亮API包括请求DSL构建和结果解析两部分。
构建
request.source().highlighter(new HghlightBuilder().field(name)//是否需要与字段匹配.requireFieldMatch(false))Testpublic void testHighLight() throws IOException {//1 准备RequestSearchRequest request new SearchRequest(hotel);//2 准备DSLrequest.source().query(QueryBuilders.matchQuery(name , 如家));//2.2 高亮request.source().highlighter(new HighlightBuilder().field(name).requireFieldMatch(false));//3 发送请求SearchResponse response restClient.search(request , RequestOptions.DEFAULT);//4 解析响应SearchHits searchHits response.getHits();//5 获取总条数long total searchHits.getTotalHits().value;//4.2 文档数组SearchHit[] hits searchHits.getHits();//4.3 遍历for(SearchHit hit : hits){//获取文档sourceString json hit.getSourceAsString();//反序列化HotelDoc hotelDoc JSON.parseObject(json , HotelDoc.class);//获取高亮结果MapString , HighlightField highlightFields hit.getHighlightFields();//根据字段名获取高亮结果HighlightField highlightField hightlightFields.get(name);//获取高亮值String name highlightField.getFragments()[0].string();//覆盖非高亮结果hotelDoc.setName(name);}}所有搜索DSL的构建记住一个API SearchRequest的source()方法。 高亮结果解析是参考JSON结果逐层解析
算分控制
FunctionScoreQueryBuilder functionScoreQuery QueryBuilders.functionScoreQuery(//原始查询相关性算分的查询boolQuery ,new FunctionSocreQueryBuilder.FilterFunctionBuilder[]{new FunctionScoreQueryBuilder.FilterFunctionBuilder(//过滤条件QueryBuilders.termQuery(isAd , true),//算分函数ScoreFuntionBuilders.weightFactorFuntion(10))}
);数据聚合
聚合的分类
聚合aggregations可以实现对文档数据的统计、分析、运算。聚合常见的有三类 桶Bucket聚合用来对文档做分组 TermAggregation:按照文档字段值分组Date Histogram:按照日期阶梯分组例如一周为一组或者一月为一组 度量Metric聚合用以计算一些值比如最大值、最小值、平均值等 Avg求平均值Max求最大值Min求最小值Stats同时求max、min、avg、sum等 管道pipeline聚合其他聚合的结果为基础做聚合
什么是聚合
聚合是对文档数据的统计、分析、计算
聚合的常见种类有哪些
Bucket对文档数据分组并统计每组数量Metric对文档数据做计算例如avgPipeline基于其他聚合结果再做聚合
参与聚合的字段类型必须是
keyword数值日期布尔
DSL实现Bucket聚合
GET /hotel/_search
{size:0, // 设置size为0结果中不包含文档只包含聚合结果aggs:{ // 定义聚合brandAgg:{ // 给聚合起个名字terms:{ // 聚合的类型按照品牌值聚合所以选择termfield:brand, // 参与聚合的字段size:20 // 希望获取的聚合结果数量}}}
}aggs代表聚合与query同级此时query的作用是
限定聚合的文档范围
聚合必须的三要素
聚合名称聚合类型聚合手段
聚合可配置属性有
size指定聚合结果数量order指定聚合结果排序方式field指定聚合字段
DSL实现Metrics聚合
例如我们要求获取每个品牌的用户评分的min、max、avg等值
GET /hotel/_search
{size:0,aggs:{brandAgg:{terms:{field:brand,size:20},aggs:{// 是brands聚合的子聚合也就是分组后对每组分别计算score_status:{ // 聚合名称stats:{ // 聚合类型这里stats可以计算min、max、avg等field:score// 聚合字段这里可以是score}}}}}
}RestAPI实现聚合
Testpublic void testAggregation() throws IOException {// 准备RequestSearchRequest request new SearchRequest(hotel);// 准备DSL// 设置sizerequest.source().size(0);// 聚合request.source().aggregation(AggregationBuilders.terms(brandAgg).size(20).field(brand));//发出请求SearchResponse response restClient.search(request, RequestOptions.DEFAULT);//解析聚合结果Aggregations aggregations response.getAggregations();//根据名称获取聚合结果Terms brandTerms aggregations.get(brand_agg);//获取桶List? extends Terms.Bucket buckets brandTerms.getBuckets();for (Terms.Bucket bucket : buckets) {//获取key也就是品牌信息String brandName bucket.getKeyAsString();System.out.println(brandName);}}实现对品牌、城市、星级的聚合
Testpublic MapString , ListString testMap() throws IOException {// 准备RequestSearchRequest request new SearchRequest(hotel);// 准备DSL// 设置sizerequest.source().size(0);// 聚合request.source().aggregation(AggregationBuilders.terms(brandAgg).size(20).field(brand));request.source().aggregation(AggregationBuilders.terms(cityAgg).size(20).field(city));request.source().aggregation(AggregationBuilders.terms(starAgg).size(20).field(starName));//发出请求SearchResponse response restClient.search(request, RequestOptions.DEFAULT);//解析聚合结果Aggregations aggregations response.getAggregations();MapString , ListString result new HashMap();result.put(brandAgg , getAggByName(brandAgg , aggregations));result.put(cityAgg , getAggByName(cityAgg , aggregations));result.put(starAgg , getAggByName(starAgg , aggregations));return result;}private ListString getAggByName(String name , Aggregations aggregations){ListString result new ArrayList();Terms terms aggregations.get(name);for (Terms.Bucket bucket : terms.getBuckets()) {String keyAsString bucket.getKeyAsString();result.add(keyAsString);}return result;}拼音分词器
如何使用拼音分词器
下载pinyin分词器
解压并放到elasticsearch的plugin目录
重启
如何自定义分词器
创建索引库时在settings中配置可以包含三部分
character filter
tokenizer
filter
拼音分词器注意事项
为了避免搜索到同音字搜索时不要使用拼音分词器
自动补全
elasticsearch提供了Completion Suggester查询来实现自动补全功能。这个查询会匹配以用户输入内容开头的词条并返回。为了提高补全查询的效率对于文档中字段的类型有一些约束
参与补全查询的字段必须是completion类型字段的内容一般是用来补全的多个词条形成的数组
// 自动补全查询
GET /test2/_search
{suggest:{titleSuggest:{text:s,completion:{field:title,skip_duplicates:true,size:10}}}
}自动补全对字段的要求
类型是completion类型字段值是多词条的数组
Test
public void testSuggest() throws IOException {// 准备RequestSearchRequest request new SearchRequest(hotel);// 准备DSLrequest.source().suggest(new SuggestBuilder().addSuggestion(suggestions , SuggestBuilders.completionSuggestion(suggestion).prefix(h).skipDuplicates(true).size(10)));// 发起请求SearchResponse response client.search(request,RequestOptions.DEFAULT);// 解析结果Suggest suggest response.getSuggest();// 根据名称获取补全结果CompletionSuggestion suggestion suggest.getSuggestion(hotelSuggestion);//获取options并遍历for(CompletionSuggestion.Entry.Option option : suggestion.getOptions()){String text option.getText().string();System.out.println(text);}
}数据同步
同步调用 优点实现简单粗暴缺点业务耦合度高 异步通知 优点低耦合实现难度一般缺点依赖mq的可靠性 监听binlog 优点完全解除服务间耦合缺点开启binlog增加数据库负担、实现复杂度高
异步通知数据同步步骤
定义config文件声明队列和交换机bean并绑定队列与交换机在增加删除修改接口中发送mq消息到指定的增删改队列定义监听器监听mq消息并修改es文档
集群搭建
ES集群结构
单机的es做数据存储必然面临两个问题海量数据存储问题单点故障问题
海量数据存储问题将索引库从逻辑上拆分N个分片shard存储到多个节点单点故障问题将分片数据在不同节点备份replica
创建es集群
首先编写一个docker-compose.yml文件内容如下
version: 2.2
services:es01:image: elasticsearch:7.12.1container_name: es01environment:- node.namees01- cluster.namees-docker-cluster- discovery.seed_hostses02,es03- cluster.initial_master_nodeses01,es02,es03- ES_JAVA_OPTS-Xms512m -Xmx512mvolumes:- data01:/usr/share/elasticsearch/dataports:- 9200:9200networks:- elastices02:image: elasticsearch:7.12.1container_name: es02environment:- node.namees02- cluster.namees-docker-cluster- discovery.seed_hostses01,es03- cluster.initial_master_nodeses01,es02,es03- ES_JAVA_OPTS-Xms512m -Xmx512mvolumes:- data02:/usr/share/elasticsearch/dataports:- 9201:9200networks:- elastices03:image: elasticsearch:7.12.1container_name: es03environment:- node.namees03- cluster.namees-docker-cluster- discovery.seed_hostses01,es02- cluster.initial_master_nodeses01,es02,es03- ES_JAVA_OPTS-Xms512m -Xmx512mvolumes:- data03:/usr/share/elasticsearch/datanetworks:- elasticports:- 9202:9200
volumes:data01:driver: localdata02:driver: localdata03:driver: localnetworks:elastic:driver: bridgees运行需要修改一些linux系统权限修改/etc/sysctl.conf文件
vi /etc/sysctl.conf添加下面的内容
vm.max_map_count262144然后执行命令让配置生效
sysctl -p通过docker-compose启动集群
docker-compose up -d集群状态监控
kibana可以监控es集群不过新版本需要依赖es的x-pack 功能配置比较复杂。
这里推荐使用cerebro来监控es集群状态官方网址https://github.com/lmenezes/cerebro
双击的cerebro.bat文件即可启动服务。
访问http://localhost:9000 即可进入管理界面 输入你的elasticsearch的任意节点的地址和端口点击connect即可 绿色的条代表集群处于绿色健康状态。
创建索引库
1利用kibana的DevTools创建索引库
在DevTools中输入指令
PUT /itcast
{settings: {number_of_shards: 3, // 分片数量number_of_replicas: 1 // 副本数量},mappings: {properties: {// mapping映射定义 ...}}
}2利用cerebro创建索引库
利用cerebro还可以创建索引库 填写索引库信息 点击右下角的create按钮 查看分片效果
回到首页即可查看索引库分片效果 ES集群中的节点角色
elasticsearch中集群节点有不同的职责划分 ES脑裂
默认情况下每个节点都是master eligible节点因此一旦master节点宕机其他候选节点会选举一个称为主节点。当主节点与其他节点网络故障时可能发生脑裂问题。
为了避免脑裂需要要求选票超过eligible节点数量1/2才能当选为主因此eligible节点数量最好是奇数。对应配置项是discovery.zen.minimux_master_nodes,在es7.0以后已经成为默认配置因此一般不会发生脑裂问题。
master eligible结点的作用 参与集群选主主节点可以管理集群状态、管理分片信息、处理创建和删除索引库的请求 data结点的作用 数据的CRUD coordinator结点的作用 路由请求到其他节点合并查询到的结果返回给用户
ES集群的分布式存储
当新增文档时应该保存到不同的分片保证数据均衡那么coordinating node如何确定数据该存储到哪个分片呢elasticsearch会通过hash算法来计算文档应该存储到哪个分片
shard hash(_routing) % number_of_shards说明
_routing默认是文档的id算法与分片数量有关因此索引库一旦创建分片数量不能修改
ES集群的分布式查询
elasticsearch的查询分为两个阶段
scatter phase:分散阶段coordinating node会把请求分发到每一个分片gather phase:聚集阶段coordinating node汇总data node的搜索结果并处理为最终结果集返回给用户
ES集群的故障转移
集群的master节点会监控集群中的节点状态如果发现有节点宕机会立即将宕机节点的分片数据迁移到其他节点确保数据安全这个叫做故障转移 文章转载自: http://www.morning.xxzjb.cn.gov.cn.xxzjb.cn http://www.morning.jqswf.cn.gov.cn.jqswf.cn http://www.morning.ftdlg.cn.gov.cn.ftdlg.cn http://www.morning.sdecsd.cn.gov.cn.sdecsd.cn http://www.morning.jbysr.cn.gov.cn.jbysr.cn http://www.morning.rdkgw.cn.gov.cn.rdkgw.cn http://www.morning.kzpxc.cn.gov.cn.kzpxc.cn http://www.morning.qzqjz.cn.gov.cn.qzqjz.cn http://www.morning.wrlcy.cn.gov.cn.wrlcy.cn http://www.morning.dbrnl.cn.gov.cn.dbrnl.cn http://www.morning.mwlxk.cn.gov.cn.mwlxk.cn http://www.morning.rlfr.cn.gov.cn.rlfr.cn http://www.morning.pjwrl.cn.gov.cn.pjwrl.cn http://www.morning.bgdk.cn.gov.cn.bgdk.cn http://www.morning.dbfp.cn.gov.cn.dbfp.cn http://www.morning.mhmcr.cn.gov.cn.mhmcr.cn http://www.morning.drgmr.cn.gov.cn.drgmr.cn http://www.morning.jqlx.cn.gov.cn.jqlx.cn http://www.morning.glnmm.cn.gov.cn.glnmm.cn http://www.morning.gnkbf.cn.gov.cn.gnkbf.cn http://www.morning.mxmtt.cn.gov.cn.mxmtt.cn http://www.morning.wpmqq.cn.gov.cn.wpmqq.cn http://www.morning.yxzfl.cn.gov.cn.yxzfl.cn http://www.morning.fqqcn.cn.gov.cn.fqqcn.cn http://www.morning.yhgbd.cn.gov.cn.yhgbd.cn http://www.morning.xmyrn.cn.gov.cn.xmyrn.cn http://www.morning.tgmfg.cn.gov.cn.tgmfg.cn http://www.morning.dncgb.cn.gov.cn.dncgb.cn http://www.morning.bwzzt.cn.gov.cn.bwzzt.cn http://www.morning.flqbg.cn.gov.cn.flqbg.cn http://www.morning.rnqnp.cn.gov.cn.rnqnp.cn http://www.morning.jfsbs.cn.gov.cn.jfsbs.cn http://www.morning.junyaod.com.gov.cn.junyaod.com http://www.morning.lmnbp.cn.gov.cn.lmnbp.cn http://www.morning.rrxgx.cn.gov.cn.rrxgx.cn http://www.morning.mstbbs.com.gov.cn.mstbbs.com http://www.morning.nrwr.cn.gov.cn.nrwr.cn http://www.morning.jrtjc.cn.gov.cn.jrtjc.cn http://www.morning.tkxyx.cn.gov.cn.tkxyx.cn http://www.morning.sqskm.cn.gov.cn.sqskm.cn http://www.morning.pngph.cn.gov.cn.pngph.cn http://www.morning.yrblz.cn.gov.cn.yrblz.cn http://www.morning.dbphz.cn.gov.cn.dbphz.cn http://www.morning.lqljj.cn.gov.cn.lqljj.cn http://www.morning.ghxzd.cn.gov.cn.ghxzd.cn http://www.morning.jlnlr.cn.gov.cn.jlnlr.cn http://www.morning.c7512.cn.gov.cn.c7512.cn http://www.morning.sjbpg.cn.gov.cn.sjbpg.cn http://www.morning.simpliq.cn.gov.cn.simpliq.cn http://www.morning.mdnnz.cn.gov.cn.mdnnz.cn http://www.morning.rqxch.cn.gov.cn.rqxch.cn http://www.morning.pqndg.cn.gov.cn.pqndg.cn http://www.morning.tmfm.cn.gov.cn.tmfm.cn http://www.morning.spwm.cn.gov.cn.spwm.cn http://www.morning.mzqhb.cn.gov.cn.mzqhb.cn http://www.morning.qkwxp.cn.gov.cn.qkwxp.cn http://www.morning.ddjp.cn.gov.cn.ddjp.cn http://www.morning.rtbx.cn.gov.cn.rtbx.cn http://www.morning.nytpt.cn.gov.cn.nytpt.cn http://www.morning.trfrl.cn.gov.cn.trfrl.cn http://www.morning.dnbkz.cn.gov.cn.dnbkz.cn http://www.morning.klpwl.cn.gov.cn.klpwl.cn http://www.morning.sfzwm.cn.gov.cn.sfzwm.cn http://www.morning.zcsyz.cn.gov.cn.zcsyz.cn http://www.morning.dlurfdo.cn.gov.cn.dlurfdo.cn http://www.morning.lkxzb.cn.gov.cn.lkxzb.cn http://www.morning.lqytk.cn.gov.cn.lqytk.cn http://www.morning.lpgw.cn.gov.cn.lpgw.cn http://www.morning.lpmjr.cn.gov.cn.lpmjr.cn http://www.morning.spkw.cn.gov.cn.spkw.cn http://www.morning.stpkz.cn.gov.cn.stpkz.cn http://www.morning.zrgdd.cn.gov.cn.zrgdd.cn http://www.morning.iknty.cn.gov.cn.iknty.cn http://www.morning.ytnn.cn.gov.cn.ytnn.cn http://www.morning.hrydl.cn.gov.cn.hrydl.cn http://www.morning.kpcky.cn.gov.cn.kpcky.cn http://www.morning.pwzzk.cn.gov.cn.pwzzk.cn http://www.morning.ggtkk.cn.gov.cn.ggtkk.cn http://www.morning.thbqp.cn.gov.cn.thbqp.cn http://www.morning.kfcfq.cn.gov.cn.kfcfq.cn