赞
踩
黑马-SpringCloud微服务技术栈数据聚合。
yml文件
|| test测试类
|| 启动类
里的配置即可。E:\微服务\实用篇\day05-Elasticsearch01\资料\hotel-demo
。E:\微服务\实用篇\day07-Elasticsearch03\资料\hotel-admin
。Bucket
(桶聚合):对文档数据分组;TermAggregation:按照文档字段分组;Date Histogram:按日期阶梯分组,如一周或一月为一组。Metric
(度量聚合或嵌套聚合):对文档数据做计算,例如avg、min、max、status(同时求sum、min等)等;Pipeline
(管道聚合):基于其它聚合结果再做聚合。# 统计所有数据中的酒店品牌有几种,此时可以根据酒店品牌的名称做聚合 # size-设置size为0,结果中不包含文档,只包含聚合结果 # aggs-定义聚合 brandAgg-给聚合起个名字 # terms-聚合的类型,按照品牌值聚合,所以选择 # field-参与聚合的字段 size- 希望获取的聚合结果数量 GET /hotel/_search { "size": 0, "aggs": { "brandAgg": { "terms": { "field":"brand", "size": 10 } } } } # Bucket聚合会统计Bucket内的文档数量,记为_count,并且按照_count降序排序 GET /hotel/_search { "size": 0, "aggs": { "brandAgg": { "terms": { "field":"brand", "size": 10, "order": { "_count": "asc" } } } } } # Bucket聚合是对索引库的所有文档做聚合,我们可以限定要聚合的文档范围,只要添加query条件 GET /hotel/_search { "query": { "range": { "price": { "lte": 200 } } }, "size": 0, "aggs": { "brandAgg": { "terms": { "field":"brand", "size": 10 } } } } # 获取每个品牌的用户评分的min、max、avg等值. # aggs-brands聚合的子聚合,也就是分组后对每组分别计算 # scoreAgg-聚合名称 # stats-聚合类型,这里stats可以计算min、max、avg等 # field-聚合字段,这里是score GET /hotel/_search { "size": 0, "aggs": { "brandAgg": { "terms": { "field":"brand", "size": 10, "order": { "scoreAgg.avg": "desc" } }, "aggs": { "scoreAgg": { "stats": { "field": "score" } } } } } }
character filters
:在tokenizer之前对文本进行处理。例如删除字符、替换字符。tokenizer
:将文本按照一定的规则切割成词条(term)。例如keyword,就是不分词;还有ik_smart。tokenizer filter
:将tokenizer输出的词条做进一步处理。例如大小写转换、同义词处理、拼音处理等。# 安装pinyin分词器 # 查看数据卷elasticsearch的plugins目录位置 docker volume inspect es-plugins # 到这个目录下 cd /var/lib/docker/volumes/es-plugins/_data # 使用FileZillar直接传输Windows下解压的pinyin分词器的文件夹,结果是成功的 # 重启es容器 docker restart es # 查看es日志 docker logs -f es # 测试拼音分词器 GET /_analyze { "text": ["如家酒店还不错"], "analyzer": "pinyin" } # 删除索引库 DELETE /test # 自定义拼音分词器,创建索引库时,通过settings来配置自定义的analyzer(分词器);拼音分词器适合在创建倒排索引的时候使用,但不能在搜索的时候使用。--导致多音字都被搜出来 # 创建倒排索引时应该用my_analyzer分词器 -- analyzer; # 字段在搜索时应该使用ik_smart分词器 -- search_analyzer; PUT /test { "settings": { "analysis": { "analyzer": { "my_analyzer": { "tokenizer": "ik_max_word", "filter": "py" } }, "filter": { "py": { "type": "pinyin", "keep_full_pinyin": false, "keep_joined_full_pinyin": true, "keep_original": true, "limit_first_letter_length": 16, "remove_duplicated_term": true, "none_chinese_pinyin_tokenize": false } } } }, "mappings":{ "properties":{ "name": { "type": "text", "analyzer": "my_analyzer", "search_analyzer": "ik_smart" } } } } # 测试自定义分词器 GET /test/_analyze { "text": ["如家酒店还不错"], "analyzer": "pinyin" }
completion suggester
查询-实现自动补全功能。(P128)completion
类型;字段值是多词条的数组。# 自动补全的索引库 PUT test1 { "mappings":{ "properties":{ "title": { "type": "completion" } } } } # 示例数据 POST test1/_doc { "title":["Sony", "WH-1000XM3"] } POST test1/_doc { "title":["SK-II", "PITERA"] } POST test1/_doc { "title":["Nintendo", "switch"] } # 自动补全查询 POST /test1/_search { "suggest": { "title_suggest": { "text": "s", # 关键字 "completion": { "field": "title", # 补全字段 "skip_duplicates": true, # 跳过重复的 "size": 10 # 获取前10条结果 } } } }
elasticsearch
与mysql
之间的数据同步(P132)依赖mq
的可靠性。开启binlog
增加数据库负担、实现复杂度高。–使用canal
中间件。两个问题
:master eligi
(主节点)–备选主节点:主节点可以管理和记录集群状态、决定分片在哪个节点、处理创建和删除索引库的请求。data
(数据节点)–数据节点:存储数据、搜索、聚合、CRUD。ingest
–数据存储之前的预处理。coordinating
(协调节点)–路由请求到其它节点合并其它节点处理的结果,返回给用户。coordinating node
根据id
做hash
运算,得到结果对shard
数量取余,余数就是对应的分片。Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。