ElasticSearch简介
Elasticsearch是用Java开发并且是当前最流行的开源的企业级搜索引擎。 能够达到实时搜索,稳定,可靠,快速,安装使用方便。 客户端支持Java、.NET(C#)、PHP、Python、Ruby等多种语言。
应用场景
像我们百度上搜索的词条,商城搜索的商品关键字等都是通过ES搜索引擎去做的查询。
ElasticSearch和Lucene
Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库(框 架)
Lucene缺点:
- 1)只能在Java项目中使用,并且要以jar包的方式直接集成项目中.
- 2)使用非常复杂-创建索引和搜索索引代码繁杂
- 3)不支持集群环境-索引数据不同步(不支持大型项目)
- 4)索引数据如果太多就不行,索引库和应用所在同一个服务器,共同占用硬 盘.共用空间少.
我们可以理解成ES是基于Lucene所实现的分布式搜索引擎,相对Lucene来说,ES的功能更加强大,可操作性的api更加简单。
关于ES vs Solr比较

ES 全文检索和分词原理
全文检索: 程序在创建索引和查询索引的过程中,都会对数据做一个文本检索,提炼关键字在文本的位置和出现次数。后续在查询时,同样检索数据中关键字,根据关键字数据去找索引(倒排索引),再去获取对应索引的详细信息。
分词原理是基于倒排索引。
创建索引流程: 处理数据 -> 数据分词(记录文本位置,和出现次数) -> 根据数据值去重 -> 倒排索引
查询索引流程: 数据条件 -> 数据分词 -> 根据词条获取 index下标 -> 查询具体内容
倒排索引: 根据词条寻找index。 通常我们是根据index去查询数据。
如何理解ElasticSearch
ElasticSearch可以看成一个数据库,一个非关系型数据库,自身支持的数据格式是json。他也有自己可视化客户端,我们也可以通过api和代码对其进行调用。
ES 和关系型数据库

ES服务的安装和配置
安装
注: ES是对内存要求比较高的,默认是1G,大量的数据会加载到内存
ES不能使用root用户来启动,必须使用普通用户来安装启动。为了安全不允许使用root用户启动。
后台启动的形式 ./目标文件 -d
我这边下载的是 elasticsearch-7.6.1-linux-x86_64.tar.gz
[root@10-9-44-97 es]
[root@10-9-44-97 es]
[root@10-9-44-97 es]
[root@10-9-44-97 es]
[root@10-9-44-97 es]
[root@10-9-44-97 es]
[root@10-9-44-97 es]
esuser ALL=(ALL) ALL
[root@10-9-44-97 es]
[esuser@10-9-44-97 es]$
[esuser@10-9-44-97 es]$ mkdir ‐p /usr/local/es/elasticsearch‐7.6.1/log
[esuser@10-9-44-97 es]$ mkdir ‐p /usr/local/es/elasticsearch‐7.6.1/data
[esuser@10-9-44-97 es]$ cd /usr/local/es/elasticsearch‐7.6.1/config
[esuser@10-9-44-97 es]$ vim elasticsearch.yml
elasticsearch.yml 配置文件
建议配置的都手打下,直接粘贴可能会存在格式问题
cluster.name: es-tx
node.name: node-tx-1
path.data: /usr/local/es/elasticsearch‐7.6.1/data
path.logs: /usr/local/es/elasticsearch‐7.6.1/log
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["服务器ip"]
cluster.initial_master_nodes: ["node名称"]
http.cors.enabled: true
http.cors.allow‐origin: "*"
修改jvm.option
根据自己服务器内存大小来配置jvm堆内存大小。es默认堆大小是1g,我们如果资源比较充裕,可以调整到2g。
vim /usr/local/es/elasticsearch‐7.6.1/config/jvm.options
‐Xms2g
‐Xmx2g
启动ES服务
[esuser@10-9-44-97 es]$ ./usr/local/es/elasticsearch-7.6.1/bin/elasticsearch -d
[esuser@10-9-44-97 elasticsearch-7.6.1]$ ps -ef |grep elasticsearch
esuser 44951 1 19 15:00 pts/0 00:00:17 /usr/local/es/elasticsearch-7.6.1/jdk/bin/java -Des.networkaddress.cache.ttl=60 -Des.networkaddress.cache.negative.ttl=10 -XX:+AlwaysPreTouch -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true -XX:-OmitStackTraceInFastThrow -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dio.netty.allocator.numDirectArenas=0 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -Djava.locale.providers=COMPAT -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -Djava.io.tmpdir=/tmp/elasticsearch-6367305308402663350 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=data -XX:ErrorFile=logs/hs_err_pid%p.log -Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,pid,tags:filecount=32,filesize=64m -XX:MaxDirectMemorySize=268435456 -Des.path.home=/usr/local/es/elasticsearch-7.6.1 -Des.path.conf=/usr/local/es/elasticsearch-7.6.1/config -Des.distribution.flavor=default -Des.distribution.type=tar -Des.bundled_jdk=true -cp /usr/local/es/elasticsearch-7.6.1/lib/* org.elasticsearch.bootstrap.Elasticsearch -d
esuser 45014 44951 0 15:00 pts/0 00:00:00 /usr/local/es/elasticsearch-7.6.1/modules/x-pack-ml/platform/linux-x86_64/bin/controller
esuser 46836 44424 0 15:01 pts/0 00:00:00 grep --color=auto elasti
自己的服务器端口号一定要开相应的端口,我们http.port: 9200 所以要把服务器相应端口也打开,一般阿里云和腾讯云都可以在安全组内配置端口,也可以通过设置linux防火墙的形式打开。
端口打开后 可以访问 http://服务器ip:端口/ 就能看到我们自己 es的一些信息
{
"name" : "xt-node1",
"cluster_name" : "xt-es",
"cluster_uuid" : "_na_",
"version" : {
"number" : "7.6.1",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "aa751e09be0a5072e8570670309b1f12348f023b",
"build_date" : "2020-02-29T00:15:25.529771Z",
"build_snapshot" : false,
"lucene_version" : "8.4.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
遇到的问题
错误信息描述:
max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
**原因:**最大虚拟内存太小
每次启动机器都手动执行下。
- 执行以下命令
- 编辑 /etc/sysctl.conf,
- 添加内容:vm.max_map_count=262144
- 保存后,执行:sysctl ‐p
可能会保存失败:
参数报sysctl: cannot stat /proc/sys/–p: No such file or directory
#解决办法
1、 modprobe br_netfilter
2、 ls /proc/sys/net/bridge
#最后再执行下就可以了
3、 sysctl -p
注意: 启动ES的时候出现 Permission denied
原因:是因为权限问题,
chown -R 创建的用户名 文件路径
chown -R esuser /usr/local/es/elasticsearch-7.6.1
备注:问题解决完成之后,重新连接xshell生效。
Kibana客户端 - Elasticsearch可视化界面
为了更好的操作elasticsearch,我们安装个Kibana客户端。
安装
选好路径 /usr/local/es 解压 tar -zxvf kibana-X.X.X-linux-x86_64.tar.gz 我们可以去安装的文件目录下 config内
配置 kibana.yml
vi kibana.yml
server.port: 5601
server.host: "服务器ip"
elasticsearch.hosts: ["http://es服务器ip:端口"]
启动
确保端口开启后,启动kibana,不然会报端口错误
./bin/kibana
结果样式
访问 http://ip:端口/  看到这个页面就证明kibana客户端启动成功了,后续我们也会用到这个可视化工具去做一些更直观的数据操作。
大家可以按照我这个操作,有什么疑问欢迎留言~
我是祥天,期望在提高自己的同时,输出较高质量的分享,感谢各位读者的:点赞、收藏和评论,我们一起加油~
|