- es的简单概念:
es可以更快的获得你想要搜索的数据,先对比一下和mysql的区别:
es中的索引就相当于一个数据库,而类型就是一张表,文档则表示一行数据,一列代表着属性。es在存储的时候则是以json的方式进行存储的。
es之所以快是因为他维护了一张倒排索引表
比如把以上5条记录保存到es中,就会维护一张倒排索引表。比如1:红海行动就会被拆分成红海和行动。红海和行动在倒排索引中分别记录着文档1。2:探索红海行动就会被拆分成探索,红海和行动。这样倒排索引中就会分别记录对应的文档2。当我们需要进行检索红海特工行动的时候就会去倒排索引中找到 第1,2,5行。然后看他们对应的文档是哪一个,然后根据相关性得分进行比较。这里3,5比较适合,但是3命中率更高。
- 下面先安装一下es:
- 拉取镜像
docker pull elasticsearch:7.4.2
docker pull kibana:7.4.2
- 创建两个文件夹,之后会和docker 相关的配置文件相挂载,以后修改这两个文件夹中的内容,也就修改了docker 中elasticsearch的配置
mkdir -p /mydata/elasticsearch/config
mkdir -p /mydata/elasticsearch/data
- 创建elasticsearch.yml文件,并向其中写入 http.host: 0.0.0.0
echo "http.host: 0.0.0.0" >> /mydata/elasticsearch/config/elasticsearch.yml
(注意:如果host: 0.0.0.0 这个冒号后面没有空格,则会在后面启动的时候报错,报错信息如下所示:)
- 启动elasticsearch
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx512m" \
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.4.2
解释
--name elasticsearch :就是为容器起了个名字,叫elasticsearch
-p 9200:9200 : 发送http 请求的时候用的是9200 端口
-p 9300:9300 : es在集群模式下,各节点间通信的端口
-e "discovery.type=single-node" 表示以单节点模式运行
-e ES_JAVA_OPTS="-Xms64m -Xmx128m" 设置运行内存大小,如果不设置, elasticsearch 起来后就会占用全部内存,导致机器卡死
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml 表示设置挂载,即将前面这个elasticsearch.yml 和后面这个elasticsearch.yml 进行一一关联,当修改前面这个文件的时候,后面这个也就修改了
-d elasticsearch:7.4.2 表示用的是 elasticsearch:7.4.2 这个版本的镜像
5.查看启动运行情况
docker ps -a
注意:如果看到没有启动成功
查看日志
docker logs 容器ID
如果是权限问题,执行命令进行赋权
chmod -R 777 /mydata/elasticsearch/
- 若之前启动失败,再次运行,并验证运行情况
docker start 容器ID
docker ps
访问IP:9200 ,如果可以看到ES版本信息,即安装启动成功
- 安装kibana:
- 拉取镜像
docker pull kibana:7.4.2
- 启动运行kibana ip写es对应的ip
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://192.168.117.128:9200 -p 5601:5601 -d kibana:7.4.2
- 查看启动运行情况
docker ps -a
-
如果已经启动起来,浏览器登陆,地址栏输入,安装机器IP:5601(kibana 启动不较慢,要等一会),如果通过浏览器能进入,则说明 kibana 安装成功
-
启动不起来报Unable to revive connection: http://192.168.162.139:9200/的问题是因为IP的原因,先办kibana容器删除掉。
// 查看es 的真是ip
docker inspect elasticsearch
// 修改 kibana 连接es的ip
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://172.17.0.5:9200 -p 5601:5601 -d kibana:7.4.2
交互式的方式进如kibana 修改 ip
docker exec -it kibana sh
//自启动
docker update kibana --restart=always
GET _search
{
"query": {
"match_all": {}
}
}
GET /custome/external/1
POST /custome/external/_bulk
{"index":{"_id":"1"}}
{"name":"lsl"}
{"index":{"_id":"2"}}
{"name":"firenay"}
POST /_bulk
{"delete":{"_index":"website","_type":"blog","_id":"123"}}
{"create":{"_index":"website","_type":"blog","_id":"123"}}
{"title":"My first blog post"}
{"index":{"_index":"website","_type":"blog"}}
{"title":"My second blog post"}
{"update":{"_index":"website","_type":"blog","_id":"123"}}
{"doc":{"title":"My second blog post"}}
GET /_cat/indices
GET /bank/account/1
GET /bank/account/_search
GET bank/_search?q=*&sort=account_number:asc
GET bank/_search?q=lastname : Mckenzie&sort=account_number:asc
GET bank/account/_search
{
"query" : {
"match" : {
"lastname" : "Mckenzie"
}
}
}
GET bank/_search
{
"query": {
"match_all": {}
}
, "sort": [
{
"account_number": {
"order": "desc"
}
}
]
, "from": 0
, "size": 5
, "_source": ["balance", "account_number"]
}
GET bank/_search
{
"query": {
"bool": {
"must": [
{ "match": { "address": "mill" } },
{ "match": { "gender": "M" } }
],
"must_not": [
{ "match": { "state": "KY" } }
],
"should": [
{
"match": {
"lastname": "Wallace"
}
}
],
"filter": {
"range": {
"age": {
"gte": 10,
"lte": 38
}
}
}
}
}
}
GET bank/_search
{
"query": {
"match": {
"address": "mill"
}
},
"aggs": {
"ageAgg": {
"terms": {
"field": "age",
"size": 10
}
},
"ageAvg":{
"avg": {
"field": "age"
}
},
"balanceAvg":{
"avg": {
"field": "balance"
}
}
}
}
GET bank/_search
{
"query": {
"match_all": {}
},
"aggs": {
"ageAgg": {
"terms": {
"field": "age",
"size": 100
},
"aggs": {
"avgAgg": {
"avg": {
"field": "balance"
}
}
}
}
}
}
GET bank/_mapping
GET _cat/indices
PUT /my_index
{
"mappings": {
"properties": {
"age":{"type": "integer"},
"email": {"type": "keyword"},
"name":{"type": "text"}
}
}
}
PUT /my_index
{
"mappings": {
"properties": {
"age":{"type": "integer"},
"email": {"type": "keyword"},
"name":{"type": "text"},
"name1":{"type": "text"}
}
}
}
GET my_index/_mapping
POST /my_index/_bulk
{"index":{"_id":"1"}}
{"age":"12","email":"1532991474@qq.com" ,"name":"lsl"}
GET my_index/_doc/1
官网命令还是很全的。
安装一下中文分词器ik
// 标准分词器对中文不是很友好
POST _analyze
{
"analyzer": "standard",
"text": "我很喜欢你"
}
下载对应版本的分词器 解压放到plugins目录下重启就好了
https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v7.4.2
POST _analyze
{
"analyzer": "ik_smart",
"text": "我很喜欢你"
}
POST _analyze
{
"analyzer": "ik_max_word",
"text": "我很喜欢你"
}
对于一些流行的语句可以在这里自己配置
这里我用nginx,先随便安装一个nginx 把里面的目录结构copy出来
docker run -p 80:80 --name nginx -d nginx:1.10
docker container cp nginx:/etc/nginx .
吧nginx 删除
//重新运行启动
docker run -p 80:80 --name nginx -v /mydata/nginx/html:/usr/share/nginx/html -v /mydata/nginx/logs:/usr/log/nginx -v /mydata/nginx/conf:/etc/nginx -d nginx:1.10
在nginx中配置自定义的分词
在这个配置里面填写自己分词的位置
把这个nginx 中配置的分词地址设置上