下载安装&&启动
-
下载
https://repo.huaweicloud.com/elasticsearch
-
安装
在上面的下载链接中找到要安装的版本,下载windows版的tar包,解压到对应目录即可
-
启动
进入到解压目录的bin文件夹中,在cmd中打开,输入elasticsearch即可
插件安装&&查看
-
安装
# 进入到解压目录的bin文件夹中,在cmd中打开,输入以下命令 elasticsearch-plugin install 插件名称
-
查看
# 进入到解压目录的bin文件夹中,在cmd中打开,输入以下命令 elasticsearch-plugin list
启动集群
# 进入到解压目录的bin文件夹中,在cmd中打开,输入以下命令
elasticsearch -E node.name=node1 -E cluster.name=geektime -E path.data=node1_data -d
elasticsearch -E node.name=node2 -E cluster.name=geektime -E path.data=node2_data -d
elasticsearch -E node.name=node3 -E cluster.name=geektime -E path.data=node3_data -d
elasticsearch -E node.name=node4 -E cluster.name=geektime -E path.data=node4_data -d
数据类型
- 字符串类型
- keyword
- text
- 数字类型
- integer
- long
- 小数类型
- float
- double
- 布尔类型
- true
- false
- 日期
- data
索引 and 映射
-
索引
# 查看索引 GET /_cat/indices?v # 创建索引 PUT /products # 创建索引,指定主分片数量和副分片数量 PUT /orders { "settings": { "number_of_shards": 1, # 主分片数量 "number_of_replicas": 0 # 副分片数量 } } # 删除索引 DELETE /products
-
映射
#创建索引时添加映射 PUT /products { "mappings": { "properties": { "id":{ "type":"integer" }, "title":{ "type": "keyword" }, "price":{ "type":"double" }, "create_at":{ "type":"date" }, "description":{ "type":"text" } } } } # 查看索引信息 GET /products/_mapping
文档
-
添加文档
# 添加文档, id值可以手动添加,如果不手动添加,es会自动创建 # 手动创建 POST /products/_doc/1 # products:索引名, 1:文档id { "id":1, "title":"iphone", "price":8999.99, "create_at":"2022-11-01", "description":"十三香,苹果良心出品,亏死了" } # 自动创建 POST /products/_doc { "title":"iphone", "price":8999.99, "create_at":"2022-11-01", "description":"十三香,苹果良心出品,亏死了" }
-
删除文档
# 基于id DELETE /products/_doc/id # products:索引名, id:文档id
-
更新文档
POST /products/_doc/id/_update # products:索引名, 1:文档id { "doc":{ "title":"OPPO" } }
-
查询文档
# 基于id查询 GET /products/_doc/id # products:索引名, id:文档id
-
文档批量操作_bulk
# 批量插入 POST /products/_doc/_bulk {"index":{}} {"title":"iphone", "price":8999.99,"create_at":"2022-11-01","description":"十三香,苹果良心出品,亏死了"} {"index":{}} {"title":"HUAWEI","price":6999.99,"create_at":"2022-11-01","description":"十三香,苹果良心出品,亏死了"} # 批量删除 POST /products/_doc/_bulk {"delete":{"_id":id}} {"delete":{"_id":id}} # 批量更新 POST /products/_doc/_bulk {"update":{"_id":id}} {"doc":{title":"HUAWEI"}}
高级查询
-
查询所有
GET /products/_search { "query":{ "match_all":{} } }
-
关键词查询(term)
GET /products/_search { "query": { "term": { "title": { "value": "OPPO" } } } }
-
范围查询(range)
GET /products/_search { "query": { "range": { "price": { "gte": 1000, "lte": 10000 } } } }
-
前缀查询(prefix)
GET /products/_search { "query": { "prefix": { "title": { "value": "OP" } } } }
-
通配符查询(wildcard) ?匹配一个字符, *匹配多个字符
GET /products/_search { "query": { "wildcard": { "description": { "value": "go*" } } } }
-
ids 查询
GET /products/_search { "query": { "ids": { "values": ["wDjA8YEBxR5yBGtYelHg", "wTjO8YEBxR5yBGtYS1GH"] } } }
-
模糊查询(fuzzy)
GET /products/_search { "query": { "fuzzy": { "title": "opjone" } } }
-
bool
查询GET /products/_search { "query": { "bool": { "must": [ {"ids": {"values": ["wDjA8YEBxR5yBGtYelHg", "wTjO8YEBxR5yBGtYS1GH"]}}, {"term": { "title": { "value": "iphone" } }} ] } } }
-
多字段查询(multi_match)
GET /movies/_search { "query": { "multi_match": { "query": "Joy", "fields": ["title", "genre"] } } }
-
默认字段分词查询(query_string)
GET /products/_search { "query": { "query_string": { "default_field": "description", "query": "十三" } } }
-
高亮查询(highlight)
GET /products/_search { "query": { "query_string": { "default_field": "description", "query": "十三" } }, "highlight": { "fields": { "*":{} } } }
-
翻页查询(from),配合数量(size)
GET /movies/_search { "query": { "match_all": {} }, "size": 5, "from":1 }
-
排序操作(sort)
GET /movies/_search { "query": { "match_all": {} }, "size": 5, "from":1, "sort": [ { "year": { "order": "desc" } } ] }
-
返回指定字段(_source)
GET /movies/_search { "query": { "match_all": {} }, "_source": ["year", "title"] }
过滤查询
-
只筛选出符合的文档,并不计算得分,而且可以缓存文档,更快
GET /movies/_search { "query": { "bool": { "must": [ {"match_all": {}} ], "filter": { "range": { "year": { "gte": 2010, "lte": 2018 } } } } } }
内置分词器
-
标准分词器
-
按照单词分词, 因为统一转为小写,过滤标点符号,中文单字分词
POST /_analyze { "analyzer":"standard", "text":"我是一个程序员,秃头的那种是不可能的,I am a good MAN" }
-
-
simple分词器
-
英文按照单词分词,英文统一转为小写,去掉符号,中文按照空格分词
POST /_analyze { "analyzer":"simple", "text":"我是一个程序员,秃头的那种是不可能的,I am a good MAN" }
-
-
whitespace分词器
-
中文,英文按照空格分词,英文不会转为小写
POST /_analyze { "analyzer":"whitespace", "text":"我是一个程序员,秃头的那种是不可能的,I am a good MAN" }
-
IK分词器(中文分词器)
-
下载
https://github.com/medcl/elasticsearch-analysis-ik/releases
-
安装
下载与elasticsearch对应版本的的文件解压放到elasticsearch安装目录中的plugins文件夹中
-
使用
-
ik_smart: 拆分的相对不是很细
-
ik_max_word: 拆分的更细
-
-
自定义扩展词和停用词
-
修改
IK
分词器的config
目录中的IKAnalyzer.cfg.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> <properties> <comment>IK Analyzer 扩展配置</comment> <!--用户可以在这里配置自己的扩展字典, 在同目录下编写.dic文件,每行只能放一个关键词,然后将文件名称添加到</entry之前,重启 --> <entry key="ext_dict"></entry> <!--用户可以在这里配置自己的扩展停止词字典, 该配置与上面相同--> <entry key="ext_stopwords"></entry> <!--用户可以在这里配置远程扩展字典 --> <!-- <entry key="remote_ext_dict">words_location</entry> --> <!--用户可以在这里配置远程扩展停止词字典--> <!-- <entry key="remote_ext_stopwords">words_location</entry> --> </properties>
-
创建映射指定分词器
PUT /products
{
"mappings": {
"properties": {
"title":{
"type": "keyword"
},
"description":{
"type":"text",
"analyzer":"standard"
}
}
}
}
集群
一个集群就是由一个或多个节点组织在一起,他们共同拥有整个数据,并一起提供索引和搜索功能,
一个集群由一个唯一的名字标识,这个名字默认就是elasticsearch
这个名字很重要,因为一个节点只能通过指定某个集群的名字,来加入这个集群
- 所有节点集群名称必须一致
cluster.name
- 每个节点必须有一个唯一的名字
node.name
- 开启每个节点远程连接
network.host:0.0.0.0
- 指定使用
ip
地址进行集群节点间的通信network.publish_host
- 修改
web
端口,tcp
端口http.port: transport.tcp.port
- 指定集群中所有节点通信列表
discovery.seed_hosts
- 允许集群初始化master节点数
clster.initial_master_nodes:["node-1", "node-2", "node-3"]
- 集群最少几个节点可用
gateway.recover_after_nodes:2
- 开启每个节点跨域访问
http.cors.enabled:true http.cors.allow-origin:"*"