文章目录
- 一:ElasticSearch简介
- ElasticSearch:(solr与Lucene与其类似)
- 二:ElasticSearch优缺点:
- 优点:
- 缺点:
- 三:ElasticSearch用法
- ElasticSearchCRUD:
- 四:linux下的ElasticSearch安装及环境配置
一:ElasticSearch简介
ElasticSearch:(solr与Lucene与其类似)
- 是一个基于Lucene的搜索服务器(ES)—数据库
- 专门为分布式环境设计
- 封装了luence的检索细节,只是走restfulapi。
- 近乎实时的存储、检索数据;本身扩展性很好
- 通过简单的RESTful API来隐藏Lucene的复杂性
- 文件内容搜索的数据库----反向检索
二:ElasticSearch优缺点:
优点:
在数据量较大的时候可以进行快速搜索,并且本身还带有分词器,可以对elasticSearch内的数据进行分词搜索。有利于数据管理。
缺点:
1.在需要添加新数据与新字段的时候,如果elasticSearch进行搜索是可能需要重新修改格式。之前的数据需要重新同步,对数据的管理有很多困难。
2.许多mysql可以搜索到的东西,在elasticSearch里就不能搜或很难搜
三:ElasticSearch用法
分片:索引指向一个或多个分片得逻辑命名空间,即一篇文章拆成多份
主分片:默认分5片,索引首先被存储在主分片中,并复制相应得副本分片
副本分片:一旦主分片失效,副分片晋升为主分片
主节点:负责创建索引,删除,分配分片数,追踪节点状态
节点:一个集群由多个节点组成,一个节点是es实例,默认每个节点都为候选主节点与数据节点
倒排索引:根据关键字倒过来找文章
ElasticSearchCRUD:
创建index(库):
# 通过hash映射来确定副本得存储位置
# 通过路由计算hash(routing) % number_of_primary_shards(分片)来得到存储得位置
# 建索引
PUT demo.1234
{
"settings" :{
"index" :{
"number_of_shards" : 2, # 主分片数量 默认为5
"number_of_replicas" : 2 # 副本数量,默认为1为不设
}
}
}
创建Type(表):
postman上输入对应传送方式,URL
在body请求的raw处传送json格式:
在raw中输入json格式命令:
{
"settings" : {
# 加了index索引之后会硬盘
# "index" : {}一般不加
"number_of_shards" : 3,
"number_of_replicas" : 1
},
"mappings" : {
# 建type 表
"userinfos" : {
# 建 document 行
"properties" : {
# 建 field 列
"userid" : { "type" : "integer" },
"username" : { "type" : "keyword" },
"birthday" : {
"type" : "date",
"format" : "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
},
"say" : { "type" : "text" }
}
}
}
}
Create:插入field信息
postman上输入对应传送方式,URL
在body请求的raw处传送json格式:
在raw中输入json格式命令:
{
"settings" : {
"number_of_shards" : 3, # 主分片为3
"number_of_replicas" : 1 # 副本不设
},
"mappings" : {
"userinfos" : {
"properties" : {
"userid" : { "type" : "integer" },
"username" : { "type" : "keyword" },
"birthday" : {
"type" : "date",
"format" : "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
},
"say" : { "type" : "text" }
}
}
}
}
Update:更新field信息
postman上输入对应传送方式,URL中输入修改id和表和update命令
在body请求的raw处传送json格式:
在raw中输入json格式命令:
{
"doc" : {
"username" : "lisi"
}
}
Delete:删除field信息
postman上输入对应传送方式,URL中输入修改id和表
然后直接send即可删除
将文章关键词分
Read:查找
- match_phrase:短语查询不能分割,需要连着查
- match_all:查所有
- match_phrase_prefix:短语前缀查询,前面都和match_phrase一样,最后一个分词作为前缀匹配
- match: 布尔匹配查询:只要查到分词当中其中任意一个,就可以查到
- multi_match:多字段匹配查询
{
"query": {
# 查询两个字段中是否都有该值的document
"multi_match": {
"query": "John like cooking",
"fields": ["name","interest"]
}
}
}
四:linux下的ElasticSearch安装及环境配置
第一步:首先我们需要安装3台虚拟机,以此模拟集群环境。
第二步:在3台虚拟机下都配置好jdk环境,jdk的安装和shell脚本安装我以前的文章有写过。
再次提供传送门—
第三步:我们下载好ElasticSearch6.2.2tar包后,将其放在/opt下解压后,将其在放在/soft/elasticsearch622/目录下
tar -zxvf elasticsearch6.2.2.tar.gz
mv elasticsearch6.2.2 /soft/elasticsearch622
第四步:修改配置文件config下的elasticsearch.yml文件
vi /opt/soft/elasticsearch622/config/elasticsearch.yml
- 集群名称
cluster.name: es-app #集群名称,可以自行修改
- 本机作为节点的名字
node.name: es-1 #节点名称,自行修改
- 主机地址和端口号
network.host: 192.168.235.133 #主机地址,这里写本机IP
http.port: 9200 #端口
- 跨域访问设置
http.cors.enabled: true #设置跨域
http.cors.allow-origin: "*" #设置访问
第五步:添加linux用户,并设置密码
useradd nicedays
passwd nicedays
# 然后设置新密码
第六步:此时就可以去启动elasticsearch了,但是往往会出错,第五步总结一下几处出错:
1. 系统最大文件数太低
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
- 解决办法:修改 vi /etc/security/limits.conf 文件末尾追加
用户名 soft nofile 65536
用户名 hard nofile 131072
用户名 soft nproc 4096
用户名 hard nproc 4096
2. 虚拟内存太低
[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
- 解决办法:修改vi /etc/sysctl.conf文件末尾追加
vm.max_map_count=655360
保存退出后输入命令更新文件
sysctl -p
3.用户访问权限不够
java.nio.file.AccessDeniedException: …/elasticsearch-6.2.2/config/jvm.options
- 解决办法:因为我们是用普通用户登的,而elasticsearch是由root解压移动的,需要root将权限转给我们普通用户
chown 用户名 elasticsearch-6.2.2安装目录路径 -R
第七步:登录普通用户并定位到bin目录,运行elasticsearch
sudo 用户名
cd /opt/soft/elasticsearch622/bin
./elasticsearch
看到上图代表登陆成功,成功我们可以去浏览器输入虚拟机的ip:端口号,以此来访问