1、软件安装
- elasticsearch:存储、搜索和运算
- kibana:图形化展示
Elasticsearch对外提供的是Restful风格的API,任何操作都可以通过发送http请求来完成。不过http请求的方式、路径、还有请求参数的格式都有严格的规范。这些规范我们肯定记不住,因此我们要借助于Kibana这个服务,Kibana提供的开发工具可以简单的发送http请求操作ES。
docker run -d
–name es
-e “ES_JAVA_OPTS=-Xms512m -Xmx512m”
-e “discovery.type=single-node”
-v es-data:/usr/share/elasticsearch/data
-v es-plugins:/usr/share/elasticsearch/plugins
–privileged
–network hmall
-p 9200:9200
-p 9300:9300
elasticsearch:7.12.1
docker run -d
–name kibana
-e ELASTICSEARCH_HOSTS=http://es:9200
–network=hmall
-p 5601:5601
kibana:7.12.1
2、倒排索引
流程描述:
1)用户输入条件"华为手机"进行搜索。
2)对用户输入条件分词,得到词条:华为、手机。
3)拿着词条在倒排索引中查找(由于词条有索引,查询效率很高),即可得到包含词条的文档id:1、2、3。
4)拿着文档id到正向索引中查找具体文档即可(由于id也有索引,查询效率也很高)。
虽然要先查询倒排索引,再查询倒排索引,但是无论是词条、还是文档id都建立了索引,查询速度非常快!无需全表扫描。
正向索引缺点:根据非索引字段,或者索引字段中的部分词条查找时,只能全表扫描。
倒排索引优点缺点:只能给词条创建索引,而不是字段;无法根据字段做排序
3、中文分词器IK
·分词器的作用是什么?
- 创建倒排索引时,对文档分词
- 用户搜索时,对输入的内容分词
·IK分词器有几种模式? - ik_smart:智能切分,粗粒度
- ik_max_word:最细切分,细粒度
·IK分词器如何拓展词条?如何停用词条? - 利用config目录的IkAnalyzer.cfg.xml文件添加拓展和停用词典
- 在词典中添加拓展词条或者停用词条
4、ES和Mysql对比助记
5、索引库CRUD
创建索引库和映射:
PUT /heima
{
“mappings”: {
“properties”: {
“info”:{
“type”: “text”,
“analyzer”: “ik_smart”
},
“email”:{
“type”: “keyword”,
“index”: “false”
},
“name”:{
“properties”: {
“firstName”: {
“type”: “keyword”
}
}
}
}
}
}
查询索引库:
GET /heima
删除索引库
DELETE /heima
修改索引库,只支持添加新的字段,不支持修改(词条重建太难)
PUT /heima/_mapping
{
“properties”: {
“age”:{
“type”: “integer”
}
}
}
6、文档CRUD
POST /heima/_doc/1
{
“info”: “黑马程序员Java讲师”,
“email”: “zy@itcast.cn”,
“name”: {
“firstName”: “云”,
“lastName”: “赵”
}
}
Get /heima/_doc/1
DELETE /heima/_doc/1
#全量修改
PUT /heima/_doc/1
{
“info”: “黑马程序员高级Java讲师”,
“email”: “zy@itcast.cn”,
“name”: {
“firstName”: “三”,
“lastName”: “张”
}
}
#局部修改
POST /heima/_update/1
{
“doc”: {
“email”: “ZhaoYun@itcast.cn”
}
}
#批量新增
POST /_bulk
{“index”: {“_index”:“heima”, “_id”: “3”}}
{“info”: “黑马程序员C++讲师”, “email”: “ww@itcast.cn”, “name”:{“firstName”: “五”, “lastName”:“王”}}
{“index”: {“_index”:“heima”, “_id”: “4”}}
{“info”: “黑马程序员前端讲师”, “email”: “zhangsan@itcast.cn”, “name”:{“firstName”: “三”, “lastName”:“张”}}
#批量删除
POST /_bulk
{“delete”:{“_index”:“heima”, “_id”: “3”}}
{“delete”:{“_index”:“heima”, “_id”: “4”}}