Elasticsearch安装与使用

ELK简介

什么是倒排索引

正常安装

docker安装集群ES

安装常见异常

安装Kibana

ES小玩儿

    加IK分词器

    ES支持拼音和中文分词

    ES基本操作



ELK简介

Elasticsearch (ES)是一个基于Lucene构建的开源、分布式、RESTful 接口全文搜索引擎。Elasticsearch 还是一个分布式文档数据库,其中每个字段均是被索引的数据且可被搜索,它能够扩展至数以百计的服务器存储以及处理PB级的数据。它可以在很短的时间内在储、搜索和分析大量的数据。它通常作为具有复杂搜索场景情况下的核心发动机。 Elasticsearch就是为高可用和可扩展而生的。可以通过购置性能更强的服务器来完成。ELK采用的是合拢索引方式

什么是倒排索引

正排索引从头查到尾 倒排索引分词后,记录每个文档出现过当前分词的序号,查询文档

正排索引是从文档到关键字的映射(已知文档求关键字),倒排索引是从关键字到文档的映射(已知关键字求文档)。
文档内容:
序号 文档内容
1 小俊是一家科技公司创始人,开的汽车是奥迪a8l,加速爽。
2 小薇是一家科技公司的前台,开的汽车是保时捷911
3 小红买了小薇的保时捷911,加速爽。
4 小明是一家科技公司开发主管,开的汽车是奥迪a6l,加速爽。
5 小军是一家科技公司开发,开的汽车是比亚迪速锐,加速有点慢

倒排索引会对以上文档内容进行关键词分词,可以使用关键词直接定位到文档内容。

单词ID单词倒排列表docId
11,2,3,4,5
2一家1,2,4,5
3科技公司1,2,4,5
4开发4,5
5汽车1,2,4,5
6奥迪1,4
7加速爽1,3,4
8保时捷2,3
9保时捷9112
10比亚迪5

从上表可以看出,每个单词在哪些文档中出现。假设查询“科技公司”,将1245条文档内容返回
一些面试题:
9200:提供给界面RESTFUL调用
9300:集群端口号(TCP协议)
ES乐观索 version CAS控制
每次更改version都会加1

我们在Linux下 Ubuntu 18.04 64位

安装JDK

正常安装

1、上传elasticsearch-6.4.3 配置 elasticsearch.yml
vi elasticsearch.yml
#本机IP
network.host: 192.168.0.1  
#协议端口号
http.port: 9200 外部 

启动
创建一个分组

修改虚拟内存
vi /etc/sysctl.conf 添加如下内容

vm.max_map_count=655360

sysctl -p 查询一下变化

再修改文件,在后面加四行
vi /etc/security/limits.conf

* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
groupadd esmayikt
useradd esyushengjun -g esmayikt -p 123456
chown -R esyushengjun:esmayikt  elasticsearch-6.4.3
su esyushengjun #切换用户 

重启服务器即可
./elasticsearch

在这里插入图片描述


docker安装

安装 docker
拉elasticsearch镜像
docker pull elasticsearch:6.8.15
cd /usr/local
mkdir -p es/config
cd es
mkdir data1
mkdir data2
mkdir data3
mkdir  plugins1
mkdir  plugins2
chmod 777 /usr/local/es/*

在es/config分别放入es1.yml、es2.yml
es1.yml

cluster.name: elasticsearch-cluster  #三台必需一致
node.name: es-node1                      #三台不一致
network.bind_host: 0.0.0.0
network.publish_host: 172.17.0.3      #本机ip
http.port: 9200                                    #三台不一致
transport.tcp.port: 9300                      #三台不一致
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
discovery.zen.ping.unicast.hosts: ["172.17.0.3:9300","172.17.0.3:9301"]    #所有集群点
discovery.zen.minimum_master_nodes: 1

es2.yml

cluster.name: elasticsearch-cluster  #三台必需一致
node.name: es-node1                      #三台不一致
network.bind_host: 0.0.0.0
network.publish_host: 172.17.0.3      #本机ip
http.port: 9201                                    #三台不一致
transport.tcp.port: 9301                      #三台不一致
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
discovery.zen.ping.unicast.hosts: ["172.17.0.3:9300","172.17.0.3:9301"]    #所有集群点
discovery.zen.minimum_master_nodes: 1

在/etc/sysctl.conf文件最后添加一行

vi /etc/sysctl.conf
vm.max_map_count=262144

执行/sbin/sysctl -p 立即生效

启动两台ES

docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d  -p 9200:9200 -p 9300:9300 -p 5601:5601 -v /usr/local/es/config/es1.yml:/usr/share/elasticsearch/config/elasticsearch.yml  -v /usr/local/es/plugins1:/usr/share/elasticsearch/plugins    -v /usr/local/es/data1:/usr/share/elasticsearch/data --name ES01 elasticsearch:6.8.15
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d  -p 9201:9201 -p 9301:9301 -v /usr/local/es/config/es2.yml:/usr/share/elasticsearch/config/elasticsearch.yml  -v /usr/local/es/plugins2:/usr/share/elasticsearch/plugins    -v /usr/local/es/data2:/usr/share/elasticsearch/data --name ES02 elasticsearch:6.8.15

过两分钟后,测试下是否成功

curl 127.0.0.1:9200

如果是阿里云,外网访问记得打开端口
在这里插入图片描述
在这里插入图片描述
如果没有启动成功,查看下docker日志,参考常见异常解决

docker logs -f -t --tail=100 ES01

安装常见异常

max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
或者
bootstrap checks failed max virtual memory areas vm.max_map_count [65530] is
https://blog.csdn.net/xcc_2269861428/article/details/100186654

所有相关文件 chmod 777 *

在/etc/sysctl.conf文件最后添加一行
vm.max_map_count=262144
执行/sbin/sysctl -p 立即生效

之后再起启动就好了

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 2048
  • hard nproc 4096

安装Kibana

ES是没有前端的,Kibana可以作为ES的前端界面
docker pull kibana:6.8.15
docker run -it -d -e ELASTICSEARCH_URL=http://172.17.0.2:9200 --name kibana --network=container:ES01 kibana:6.8.15

加IK分词器

我们的默认分词器非常不智能。比如阿里,就会被拆分成阿和里。而IK分词会把这些现代常用词进行拆分。

https://github.com/medcl/elasticsearch-analysis-ik/releases
版本一定要正确

将文件解压后放到所有集群的文件夹plugins中

在这里插入图片描述
重启ES


加拼音分词器

我们查询阿里时,有时候我们输入的是ali。而查不到阿里中文。为了更智能,我们加上拼音分词器 https://github.com/medcl/elasticsearch-analysis-pinyin/tags
找到对应的版本

将文件解压后放到所有集群的文件夹plugins中


重启ES

ES支持拼音和中文分词

1.自定义分词器 支持拼音和中文分词
DELETE  /goods
PUT /goods
{
   "settings": {
        "analysis": {
            "analyzer": {
                "ik_smart_pinyin": {
                    "type": "custom",
                    "tokenizer": "ik_smart",
                    "filter": ["my_pinyin", "word_delimiter"]
                },
                "ik_max_word_pinyin": {
                    "type": "custom",
                    "tokenizer": "ik_max_word",
                    "filter": ["my_pinyin", "word_delimiter"]
                }
            },
            "filter": {
                "my_pinyin": {
                    "type" : "pinyin",
                    "keep_separate_first_letter" : true,
                    "keep_full_pinyin" : true,
                    "keep_original" : true,
                    "limit_first_letter_length" : 16,
                    "lowercase" : true,
                    "remove_duplicated_term" : true 
                }
            }
        }
  }
  
}

重新指定文档类型映射拼音分词类型

POST /goods/_mapping/goods
{
   
  
      "goods": {
        "properties": {
          "@timestamp": {
            "type": "date"
          },
          "@version": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "attribute_list": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "category_id": {
            "type": "long"
          },
          "created_time": {
            "type": "date"
          },
          "detail": {
            "type": "text",
             "analyzer":"ik_smart_pinyin",
            "search_analyzer":"ik_smart_pinyin"

          },
          "id": {
            "type": "long"
          },
          "main_image": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "name": {
            "type": "text",
            "analyzer":"ik_smart_pinyin",
            "search_analyzer":"ik_smart_pinyin"

          },
          "revision": {
            "type": "long"
          },
          "status": {
            "type": "long"
          },
          "sub_images": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "subtitle": {
            "type": "text",
          "analyzer":"ik_smart",
         "search_analyzer":"ik_smart"

          },
          "updated_time": {
            "type": "date"
          }
        }
      }
}

ES基本操作

###创建索引
PUT /mymayikt
GET /mymayikt

###创建文档 /索引/类型/id

PUT /mymayikt/user/1
{
 “name”:”mayikt”,
“age”:21,
“sex”:0
}
GET /mymayikt/user/1
DELETE /mymayikt

创建类型

PUT /goods
POST /goods/_mapping/goods
{
      "goods": {
        "properties": {
          "@timestamp": {
            "type": "date"
          },
          "@version": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "attribute_list": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "category_id": {
            "type": "long"
          },
          "created_time": {
            "type": "date"
          },
          "detail": {
            "type": "text",
             "analyzer":"ik_smart",
            "search_analyzer":"ik_smart"

          },
          "id": {
            "type": "long"
          },
          "main_image": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "name": {
            "type": "text",
            "analyzer":"ik_smart",
            "search_analyzer":"ik_smart"

          },
          "revision": {
            "type": "long"
          },
          "status": {
            "type": "long"
          },
          "sub_images": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "subtitle": {
            "type": "text",
          "analyzer":"ik_smart",
         "search_analyzer":"ik_smart"

          },
          "updated_time": {
            "type": "date"
          }
        }
      }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值