Elasticsearch入门使用
1.安装
免安装,解压后直接运行 bin 目录下的 elasticsearch.bat 文件。
启动后打开浏览器输入 localhost:9200,显示如下消息即启动成功。
2.分词器插件
将 elasticsearch-analysis-ik-6.5.4 解压到 elasticsearch 解压目录下的 plugins 文件夹中。
3.可视化客户端
ElasticSearch Head 是一个浏览器插件/扩展程序。
直接将 ElasticSearch Head.crx 文件拖入浏览器,浏览器会自动识别扩展程序。
如果浏览器提示无法加载此扩展程序,点击浏览器的设置->扩展程序->右上角打开开发者模式,重启浏览器再次拖入 .crx 文件。如果还是不行,请参考如下连接中解决办法:
https://jingyan.baidu.com/article/f71d6037c581c91ab641d120.html
在 Elasticsearch 服务启动后打开浏览器使用插件。
4.Elasticsearch 操作客户端
解压 kibana-6.5.4-windows-x86_64 文件,尽量与 Elasticsearch 解压文件在同一目录下,方便管理。
配置 config 文件夹中的 kibana.yml 文件
直接运行 bin 目录下的 kibana.bat
访问 http://localhost:5601
点击 Dev Tools 即可操作 Elasticsearch
5. 核心概念
5-1. 索引 Index
含有相同属性的文档的集合。
5-2. 文档 Document
被索引的基本单位,一般情况下是 JSON 格式的,包含了一些列。
5-3. 列 Field
列是 Elasticsearch 的最小单位,相当于数据的某个列。
5-4. 类型 Type
索引可以定义一个或多个类型,文档必须属于一个类型。
es 6.x 后,要求一个索引只能包含一个类型。
为了便于理解,下图展示与关系型数据库的类比
6.其他概念(了解)
6-1. 逻辑概念
- 近实时: 数据更新会有1秒钟的延迟
- 节点: 单个装有es服务并且提供故障专员的拓展服务器
- 集群:一个集群就是由一个或者多个node组织在一起,共同工作。分享所有的数据,具有负载均衡功能的集群。
6-2. 物理概念:
-
分片(数据容器): 每个索引都有多个分片,每个分片是一个Luncene索引
分为:主分片、从分片
-
备份:拷贝一份分片就是完成分片的备份
7.索引的操作
7-1. 添加
PUT my_index
{
"settings": {
"number_of_shards":5,
"number_of_replicas":1
}
}
7-2. 查看
GET my_index
还可以在 elasticsearch-head 插件中查看
7-3. 删除
DELETE my_index
7-4. 类型映射(相当于创建数据库表)
此次创建前要先删除,否则会报错已存在
PUT /my_index
{
"mappings": {
"users":{
"properties": {
"id":{
"type": "long"
},
"name":{
"type": "keyword"
},
"age":{
"type": "integer"
}
}
}
}
}
7-5. 查看映射
GET /my_index/_mapping
8.文档操作
8-1. 数据类型
text 一个邮件地址,产品的描述可以使用该类型
keyword 精准的数据值查找,用于主机名、状态码
8-2. 数值类型
byte
short
integer
double
float
date
boolean
array
object
8-3. 添加文档(新增记录)
POST /索引名/类型名/文档ID
{
field1:value1,
field2:value2,
.........
}
POST /my_index/users/1
{
"id":1,
"name":"xiangyu",
"age":18
}
8-4. 查看文档 Field
GET /my_index/users/_search
8-5. 更新文档
POST /my_index/users/1/_update
{
"doc": {
"name":"lixiangyu"
}
}
或者下面这种使用添加文档的写法,类似于覆盖数据
POST /my_index/users/1
{
"id":1,
"name":"xiangyu",
"age":18
}
8-6. 删除文档
DELETE /my_index/users/1
9. 高级部分
9-0. 准备数据
PUT /es_shop
{
"mappings": {
"shop_product": {
"properties": {
"id": {
"type": "long"
},
"title": {
"type": "text",
"analyzer": "ik_smart",
"search_analyzer": "ik_smart",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"price": {"type": "integer"},
"intro": {
"type": "text",
"analyzer": "ik_smart",
"search_analyzer": "ik_smart",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"brand": {
"type": "keyword"
}
}
}
}
}
POST /es_shop/shop_product/_bulk
{"create":{"_id": 1}}
{"id":1,"title":"Apple iPhone XR (A2108) 128GB 白色 移动联通电信4G手机 双卡双待","price":5299,"intro":"【iPhoneXR限时特惠!】6.1英寸视网膜显示屏,A12仿生芯片,面容识别,无线充电,支持双卡!选【换修无忧版】获 AppleCare 原厂服务,享只换不修!更有快速换机、保值换新、轻松月付!","brand":"Apple"}
{"create":{"_id": 2}}
{"id":2,"title":"Apple 2019款 Macbook Pro 13.3【带触控栏】八代i7 18G 256G RP645显卡 深空灰 苹果笔记本电脑 轻薄本 MUHN2CH/A","price":15299,"intro":"【八月精选】Pro2019年新品上市送三重好礼,现在购买领满8000减400元优惠神劵,劵后更优惠!","brand":"Apple"}
{"create":{"_id": 3}}
{"id":3,"title":"Apple iPad Air 3 2019年新款平板电脑 10.5英寸(64G WLAN版/A12芯片/Retina显示屏/MUUL2CH/A)金色","price":3788,"intro":"8月尊享好礼!买iPad即送蓝牙耳机!领券立减!多款产品支持手写笔!【新一代iPad,总有一款适合你】选【换修无忧版】获 AppleCare 原厂服务,享只换不修!更有快速换机、保值换新、轻松月付!","brand":"Apple"}
{"create":{"_id": 4}}
{"id":4,"title":"华为HUAWEI MateBook X Pro 2019款 英特尔酷睿i5 13.9英寸全面屏轻薄笔记本电脑(i5 8G 512G 3K 触控) 灰","price":7999,"intro":"3K全面屏开启无界视野;轻薄设计灵动有型,HuaweiShare一碰传","brand":"华为"}
{"create":{"_id": 5}}
{"id":5,"title":"华为 HUAWEI Mate20 X (5G) 7nm工艺5G旗舰芯片全面屏超大广角徕卡三摄8GB+256GB翡冷翠5G双模全网通手机","price":6199,"intro":"【5G双模,支持SA/NSA网络,7.2英寸全景巨屏,石墨烯液冷散热】5G先驱,极速体验。","brand":"华为"}
{"create":{"_id": 6}}
{"id":6,"title":"华为平板 M6 10.8英寸麒麟980影音娱乐平板电脑4GB+64GB WiFi(香槟金)","price":2299,"intro":"【华为暑期购】8月2日-4日,M5青春版指定爆款型号优惠100元,AI语音控制","brand":"华为"}
{"create":{"_id": 7}}
{"id":7,"title":"荣耀20 PRO DXOMARK全球第二高分 4800万四摄 双光学防抖 麒麟980 全网通4G 8GB+128GB 蓝水翡翠 拍照手机","price":3199,"intro":"白条6期免息!麒麟980,4800万全焦段AI四摄!荣耀20系列2699起,4800万超广角AI四摄!","brand":"荣耀"}
{"create":{"_id": 8}}
{"id":8,"title":"荣耀MagicBook Pro 16.1英寸全面屏轻薄性能笔记本电脑(酷睿i7 8G 512G MX250 IPS FHD 指纹解锁)冰河银","price":6199,"intro":"16.1英寸无界全面屏金属轻薄本,100%sRGB色域,全高清IPS防眩光护眼屏,14小时长续航,指纹一健开机登录,魔法一碰传高速传输。","brand":"荣耀"}
{"create":{"_id": 9}}
{"id":9,"title":"荣耀平板5 麒麟8核芯片 GT游戏加速 4G+128G 10.1英寸全高清屏影音平板电脑 WiFi版 冰川蓝","price":1549,"intro":"【爆款平板推荐】哈曼卡顿专业调音,10.1英寸全高清大屏,双喇叭立体环绕音,配置多重护眼,值得拥有!","brand":"荣耀"}
{"create":{"_id": 10}}
{"id":10,"title":"小米9 4800万超广角三摄 6GB+128GB全息幻彩蓝 骁龙855 全网通4G 双卡双待 水滴全面屏拍照智能游戏手机","price":2799,"intro":"限时优惠200,成交价2799!索尼4800万广角微距三摄,屏下指纹解锁!","brand":"小米"}
{"create":{"_id": 11}}
{"id":11,"title":"小米(MI)Pro 2019款 15.6英寸金属轻薄笔记本(第八代英特尔酷睿i7-8550U 16G 512GSSD MX250 2G独显) 深空灰","price":6899,"intro":"【PCIE固态硬盘、72%NTSC高色域全高清屏】B面康宁玻璃覆盖、16G双通道大内存、第八代酷睿I7处理器、专业级调校MX150","brand":"小米"}
{"create":{"_id": 12}}
{"id":12,"title":"联想(Lenovo)拯救者Y7000P 2019英特尔酷睿i7 15.6英寸游戏笔记本电脑(i7 9750H 16G 1T SSD GTX1660Ti 144Hz)","price":9299,"intro":"超大1T固态,升级双通道16G内存一步到位,GTX1660Ti电竞级独显,英特尔9代i7H高性能处理器,144Hz电竞屏窄边框!","brand":"联想"}
9-1. 对查询结果进行排序
升序:asc
降序:desc
GET /es_shop/shop_product/_search
{
"sort":{
"price":"desc"
}
}
9-2.多列排序
GET /es_shop/shop_product/_search
{
"sort": [
{
"price":"desc"
},
{
"id": "desc"
}
]
}
或者
GET /es_shop/shop_product/_search
{
"sort": [
{
"price":{
"order": "desc"
}
},
{
"id":{
"order": "desc"
}
}
]
}
9-3. 分页查询
注意数据的下标从 0 开始
GET /es_shop/shop_product/_search
{
"sort": {
"id":"desc"
},
"from": 0,
"size": 3
}
第二页
GET /es_shop/shop_product/_search
{
"sort":{
"id":"asc"
},
"from": 3,
"size": 3
}
9-4. 检索查询
- term 等值查询
- terms 多个等值查询
- range 区间查询
- match 模糊查询
9-4-1. 查找商品的价格等于15299的商品
等值用 term
GET /es_shop/shop_product/_search
{
"query": {
"term": {
"price":15299
}
}
}
9-4-2. 查询id 为1 2的商品信息
GET /es_shop/shop_product/_search
{
"query": {
"terms": {
"id":[1,2]
}
}
}
9-4-3. 我们查询商品的价格在5000–10000之间的商品,按照价格订单升序进行排列
GET /es_shop/shop_product/_search
{
"query": {
"range": {
"price": {
"gte": 5000,
"lte": 10000
}
}
},
"sort": {
"price":"desc"
}
}
9-4-4. 查询一下商品的标题中 有“手机 游戏 ”
GET /es_shop/shop_product/_search
{
"query": {
"match": {
"title": "手机 游戏"
}
}
}
9-5. 逻辑查询
相当于
must -> and
should -> or
must_not -> not
9-5-1. 查询商品标题中含有 “ i7” 的字样 并且价格大于 6000元
GET /es_shop/shop_product/_search
{
"query": {
"bool": {
"must": [
{
"range": {
"price": {
"gte": 6000
}
}
},
{
"match": {
"title": "i7"
}
}
]
}
}
}
9-5-2. 查询商品标题中符合"pro"的字样或者 价格在 1000-- 3000之间
GET /es_shop/shop_product/_search
{
"query": {
"bool": {
"should": [
{
"range": {
"price": {
"gte": 1000,
"lte": 3000
}
}
},
{
"match": {
"title": "pro"
}
}
]
}
}
}
9-6. 过滤查询
- 过滤查询和检索查询从效果来看是一样的。区别在于过滤查询不平分,结果能缓存。检索查询要平分,如果不缓存,一般不会直接使用过滤查询。
检索查询时:
GET /es_shop/shop_product/_search
{
"query": {
"match": {
"title": "pro"
}
}
}
过滤查询时:
GET /es_shop/shop_product/_search
{
"query": {
"bool": {
"filter": {
"match":{
"title":"pro"
}
}
}
}
}