什么是倒排索引
- 信息存储到es时,首先把每条语句分成一个一个的词语
- 根据搜索的内容,进行分配,有匹配到的权重+1
- 把匹配到的语局给呈现出来
elasticsearch介绍
elasticsearch应用场景
- 电商平台
- 高亮显示搜索的词条信息
- 日志分析elk
elasticsearch特点
- 高性能:es可以支持一主多从,水平扩展方便
- 高可用性:一个主节点宕机后不影响用户的使用。
- 用户使用方便快捷:es采用Java开发,即使不懂Java代码,一样可以使用
- 功能丰富,配置简单
- 采用restful封装的接口,可以通过http发起请求
elasticsearch部署方法
| 安装方式 | 优点 | 对运维的要求 |
|---|---|---|
| docker | 部署方便、开箱即用、启动迅速 | 需要会docker知识、需要制作镜像、修改配置麻烦、数据需要挂载目录 |
| tar | 部署灵活、对系统侵占性小 | 需要写启动脚本文件、目录需要提前规划 |
| rpm | 部署方便、启动脚本安装即用、存放目录标准化 | 软件各个组件分散在不同的目录、卸载不彻底、默认配置需要修改 |
| ansible | 极其灵活、批量部署速度快 | 需要学习ansible语法、需要提前规划、需要专人维护 |
安装jdk
wget https://download.oracle.com/otn/java/jdk/8u60-b27/jdk-8u60-linux-x64.tar.gz
[root@db01 /server/tools]# tar -xf jdk1.8.0_131.tar.gz -C /application/
[root@db01 /application]# ln -s jdk1.8.0_131/ jdk
cat >>/etc/bashrc <<'EOF'
export JAVA_HOME=/application/jdk
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
EOF
[root@db01 /application]# . /etc/bashrc
[root@db01 /application]# java -version
java version "1.8.0_131"安装elasticsearch
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.0.rpm
//上传elasticsearch-6.6.0.rpm
[root@db01 /server/tools]# yum install elasticsearch-6.6.0.rpm -y
### NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using systemd
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
### You can start elasticsearch service by executing
sudo systemctl start elasticsearch.service配置启动
sed -i 's%#JAVA_HOME=%JAVA_HOME=/application/jdk/%g' /etc/sysconfig/elasticsearch
//更改JAVA_HOME
systemctl daemon-reload
systemctl enable elasticsearch.service
systemctl start elasticsearch.service
systemctl status elasticsearch.service
systemctl is-active elasticsearch.service检查启动
ps -ef | grep elastic
lsof -i:9200
curl localhost:9200查看配置文件位置
[root@db01 ~]# rpm -qc elasticsearch
/etc/elasticsearch/elasticsearch.yml //主配置文件
/etc/elasticsearch/jvm.options //java虚拟机配置
/etc/init.d/elasticsearch //init.d启动脚本
/etc/sysconfig/elasticsearch //环境变量,如java_home
/usr/lib/sysctl.d/elasticsearch.conf //最大连接数,不需要动
/usr/lib/systemd/system/elasticsearch.service //systemd启动脚本调整jvm配置
vim /etc/elasticsearch/jvm.options
-Xms1500m //最小内存
-Xmx1500m //最大内存,根据服务器配置调整
1.不要超过30G
2.最好预留总内存的50%调整elasticsearch配置
vim /etc/elasticsearch/elasticsearch.yml
node.name: node-1 //节点名称
path.data: /data/elasticsearch //数据目录
path.logs: /var/log/elasticsearch //日志目录
bootstrap.memory_lock: true //开启jvm内存锁定
network.host: 10.0.0.51,127.0.0.1 //绑定本机ip
http.port: 9200 //默认端口号
mkdir -p /data/elasticsearch
chown elasticsearch.elasticsearch -R /data/elasticsearch启动报错
[2019-07-09T10:49:36,109][ERROR][o.e.b.Bootstrap ] [node-1] node validation exception
[1] bootstrap checks failed
[1]: memory locking requested for elasticsearch process but memory is not locked解决方法:
参考官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/6.6/setup-configuration-memory.htmlhttps://www.elastic.co/guide/en/elasticsearch/reference/6.6/setting-system-settings.html
systemctl edit elasticsearch
[Service]
LimitMEMLOCK=infinity
systemctl daemon-reload
systemctl start elasticsearch报错总结:
- 配置文件没有任何修改
- 配置文件没有修改IP地址
- 系统内存只有1个G,启动失败
- 配置文件参数拼写错误,启动失败
- 忘记修改内存锁定,启动失败
- 重启linux
MySQL对比ES
| MySQL | ES |
|---|---|
| 库 | index(索引) |
| 表 | type(类型) |
| 行 | doc(文档) |
| 字段 | Fields(文档存在多个字段) |
检查ES是否正常
- 浏览器访问
http://10.0.0.51:9200 - shell运行
curl 10.0.0.240:9200
ES的交互方式
说明:es还为我们提供了基于http协议——以json为数据交互格式的restful API。通过9200端口与es进行通信,你甚至可以通过curl命令与es通信。
curl命令:
- 特点:最繁琐,最复杂,最容易出错
- 要求:不需要安装任何软件,只需要有curl命令
es-head插件
- 特点:查看数据方便,操作相对容易
- 要求:需要nodejs环境
kibana
- 特点:查看数据以及报表格式丰富,操作很简单
- 要求:需要java环境和安装配置kibana
curl交互演示
#节点查看
curl 10.0.0.51:9200/_cat/nodes
#状态检查
curl 10.0.0.51:9200/_cat/health
#创建个索引
curl -XPUT '10.0.0.51:9200/pincheng?pretty'
#查看索引
curl 10.0.0.51:9200/_cat/indices
#查看分片
curl 10.0.0.51:9200/_cat/shards
#往这个索引里面插入一条指定id号为1的数据,PUT更新,需要填写完整的信息.
#“库” #“表” #id
curl -XPUT '10.0.0.51:9200/pincheng/student/1?pretty' -H 'Content-Type: application/json' -d'
{
"first_name" : "zhang",
"last_name": "san",
"age" : 25,
"about" : "I love to go rock climbing",
"interests": [ "sports" ]
}'
#往这个索引里面插入一条随机生成一个id的数据(不指定id),POST更新,只需要填写需要更改的信息
curl -XPOST '10.0.0.51:9200/pincheng/student?pretty' -H 'Content-Type: application/json' -d'
{
"first_name": "li",
"last_name" : "si",
"age" : 32,
"about" : "I like to collect rock albums",
"interests": [ "music" ]
}'
#查询索引当中的所有数据
curl -XGET '10.0.0.51:9200/pincheng/student/_search?pretty'
#查询索引当中的一条数据
curl -XGET '10.0.0.51:9200/pincheng/student/1?pretty'
#删除索引当中的一条数据
curl -XDELETE '10.0.0.51:9200/pincheng/student/1?pretty'
#删除索引
curl -XDELETE 'localhost:9200/vipinfo?pretty'
#修改系统默认的副本及分片数量
curl -XPUT '10.0.0.51:9200/_template/template_http_request_record' -H 'Content-Type: application/json' -d'
{
"index_patterns": ["*"],
"settings": {
"number_of_shards" : 5,
"number_of_replicas" : 1
}
}'es-head插件交互
安装node-js环境
#安装node-js环境
cd /server/tools
wget https://nodejs.org/dist/v12.16.3/node-v12.16.3-linux-x64.tar.xz
tar -xf node-v12.16.3-linux-x64.tar.xz
#安装依赖
yum -y install openssl screen kernel-devel
#安装
mv node-v12.16.3-linux-x64/ /application/
ln -s /application/node-v12.16.3-linux-x64/ /application/node
cat >> /etc/bashrc <<'EOF'
export NODE_HOME=/application/node
export PATH=$NODE_HOME/bin:$PATH
EOF
. /etc/bashrc
[root@db01 ~]# node -v && npm -v
v12.16.3
6.14.4安装es-head
npm install -g cnpm --registry=https://registry.npm.taobao.org
cd /application/
git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head/
cnpm install //安装依赖
screen -S es-head //离线运行
cnpm run start //启动es-head
#http://localhost:9100
跨域问题
官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-http.html
vim /etc/elasticsearch/elasticsearch.yml
http.cors.enabled: true //如果启用了 HTTP 端口,那么此属性会指定是否允许跨源 REST 请求。
http.cors.allow-origin: "*" //如果 http.cors.enabled 的值为 true,那么该属性会指定允许 REST 请求来自何处。
systemctl restart elasticsearch
Chrome插件
评论






