一、什么是:Elasticsearch
1、Elasticsearch是一个开源的搜索和分析引擎,它可以帮助你在大量数据中快速地查找和分析数据。它支持多种数据格式,包括 JSON、XML 和 CSV,并提供了丰富的 query language(Query DSL)来定义搜索条件和分析规则。
优点:可以添加节点来处理大量额高流量,负载均衡
2、有啥用:实现搜索和分析
3、为什么用:
1.因为他可以横向拓展,可拓展性强(可添加节点来扩容)
2.支持大量数据的搜索还可以多线程并发
3.有可视化界面,便于理解和操作。
二、什么是分词器:
分词器是专门处理分词的组件,分词器由以下三部分组成:
-
Character Filters:针对原始文本处理,比如去除 html 标签
-
Tokenizer:按照规则切分为单词,比如按照空格切分
-
Token Filters:将切分的单词进行加工,比如大写转小写,删除 stopwords,增加同义语
ES 内置了许多分词器:
-
Standard Analyzer - 默认分词器,按词切分,小写处理
-
Simple Analyzer - 按照非字母切分(符号被过滤),小写处理
-
Stop Analyzer - 小写处理,停用词过滤(the ,a,is)
-
Whitespace Analyzer - 按照空格切分,不转小写
-
Keyword Analyzer - 不分词,直接将输入当做输出
-
Pattern Analyzer - 正则表达式,默认 \W+
-
Language - 提供了 30 多种常见语言的分词器
-
Customer Analyzer - 自定义分词器
ES分词器:Stamdard Analyzer(ES默认的分词器)
输出方式:它会对输入的文本按词的方式进行切分,切分好以后会进行转小写处理,默认的 stopwords 是关闭的。
-
2.1插件:elasticSearch-head
这是什么:也是一个可视化的界面,监管es的集群和状态
有什么用:可以监管,而且可视化,容易操作,还可以管理和操作es,分词
怎么启动:grunt server
2.2:IK分词器
为什么要用ik:
ElasticSearch 内置的分词器对我们中文使用并不友好,不能按我们的语言习惯进行分词。
ik提供中文两种分词
ik_smart :(最粗)当前切分 算法为最少切分法 何为最少切分呢,即按照其自身词典,尽可能的减少切分次数(即分词不会非常详细)进项分词 ,不会出现 一个字多个词使用的情况下 例如 成都市 最少切分可能为 成都、市 或者成都市 一个词
ik_max_word:(最细)当前切分方法 为最细粒度切分 ,会根据其字典 尽最大可能切分 切分的非常详细 例如 切分 成都市 可能切分出 成都、都市、市等几个词
可以自定义词典。
analyzer:要执行的格式k_smart 、ik_max_word
text:要分词的内容
1)最少切分:
得到分词
2)最细粒度划分:
得到:
2.3:安装kibana可视化根据dev tools
作用:调试ElasticSearch查询表达式,分析ElasticSearch查询表达式性能,调试grok。
三、sdl简单的增删改查:
创建:
PUT movies { "mappings": { "properties": { "title": { "type": "text", "analyzer":"ik_max_word", "search_analyzer":"ik_smart" }, "year": { "type": "date", "format": "yyyy" }, "type": { "type": "text", "index": false }, "star": { "type": "float", "fields":{ "keyword":{ "type":"keyword" } } }, "director": { "type": "keyword" } } }, "settings": { "index": { "number_of_shards": 5, "number_of_replicas": 1 } } }
注意:创建索引时:
type=keyword:不能被分词
index=ture:可以被索引
number_of_shards: 索引创建的分片数量 number_of_replicas:每个分片的副本(即副本)数量
1)分页查询
{ "query": { "match_all": { } }, "from":1,//哪页开始 "size":2,//每页几条 "sort": {//排序 "uid": { "order" :"asc" } } }
2、match匹配:全文检索和完全匹配
3、query:查询
4、高亮显示:
"height":{ "fields":{ "需要高亮的字段":{} }
5、聚合查询:agg
{ "aggs":{//聚合操作 "price_group":{//名称,随意起名 "terms":{//分组 "field":"price"//分组字段 } } } }
6、多表
GET /index/_search { "size": 0, "query": { "bool": { "must": [ { "match": { "table1.column1": "value1" } }, { "join": { "table2": { "column2": "column1" } } } ] } } }
四、整合Java实现搜索
1、全文搜索:match、multi_match
单字段或者多字段
2、精确查询:term
3、分页、排序 form、size,sort
·····
聚合:聚合就是对文档数据的统计、分析、技术。
常见的聚合种类:
Bucket:对文档数据分组,并统计每组数量
Metric:对文档数据做计算,例如:avg
Pipeline:基于其他聚合结果再做聚合
参与聚合的字段类型必须是:keyword,数值,日期,布尔。