概念
基于Lucene全文检索技术、使用Java语言编写的、天然的分布式搜索引擎(同类型产品:solr)
作用
大数据量、近实时搜索;可以跨语言、跨平台;
倒排索引
倒排索引:把文档内容,根据“规则”拆分成词条,根据词条查询唯一标识(ID)
倒排索引结构:词条为key,文档唯一标识(ID)为value,所形成的数据结构
索引库结构
关系对照:
索引库index 类型type 文档document 域field
数据库 表 行 列
映射mappings:建立“表”结构
类型type(了解):
一个type就像一类表。如用户表、角色表等。在Elasticsearch7.X默认type为_doc
type发展史:
- ES 5.x中一个index可以有多种type。(畅购虚拟机用的5.xxx的)
- ES 6.x中一个index只能有一种type。
- ES 7.x以后,将逐步移除type这个概念,现在的操作已经不再使用,默认_doc
Field取值类型
简单数据类型
字符串
text:会分词,不支持聚合
keyword:不会分词,将全部内容作为一个词条,支持聚合
数值
布尔
boolean
二进制
binary
范围类型
integer_range, float_range, long_range, double_range, date_range
日期
date
复杂数据类型:
对象{}
数组[]
Restful风格
Restful就是一种接口设计规范
1)基于http协议
2)每个uri都代表一种资源请求
3)不同的请求方式具有不同的含义
4)请求参数尽量嵌套在uri内部,不使用“?、&”符号拼接
5)uri请求路径尽量使用名词
ES服务器搭建
ES搭建、kibana搭建、ES-head、IK分词器(整理笔记)
索引库操作
索引库操作流程
1)创建“索引库”
2)创建“映射(构建表结构)”
创建“映射”方式:
1)动态映射:根据添加的数据,动态的创建映射(“表(类型)”结构)
缺点:字段类型、及其他参数都不可控,都是使用的默认值
2)静态映射:自定定义好映射,然后创建”表“结构
优点:所有的字段类型、及其他参数都是自己定义的,完全可控
实际开发中推荐使用:静态映射
3)往索引库中添加“文档”数据
4)索引库维护、搜索
IK中文分词器
分词方式:
ik_max_word:最多分词(细粒度),把一个文档分词后,会对词语再次分词
例如:一丁不识华为
第一步分词:一丁不识、华为
第二步分词:一丁、一、丁、不识、华为
ik_smart:最少分词(粗粒度),把一个文档分词后,对词语不会再分
例如:一丁不识华为
最终分词:一丁不识、华为
ElasticSearch搜索
1)term 精确匹配(不分词,完全匹配)
2)match 分词匹配(先分词,再匹配)