文章目录
- 全文检索流程
- ElasticSearch介绍
- ElasticSearch应用场景
- elasticsearch安装
- 允许远程访问
- 设置vm.max_map_count 的值
- elasticsearch-head
- 允许跨域
- kibana
商品数量超千万,数据库无法使用索引
如何使用全文检索:
- 使用lucene,在java中唯一的一个全文检索技术。是一个全文检索工具包。很少直接使用
- Solr、Elasticsearch,都是基于Lucene的全文检索服务器。独立运行,支持集群
实时搜索时,ES的性能更好
https://www.elastic.co/cn/downloads/elasticsearch
https://www.elastic.co/cn/downloads/beats/filebeat
https://elasticsearch.cn/
https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-10-2
https://www.elastic.co/cn/downloads/past-releases/kibana-7-10-2
https://www.elastic.co/cn/downloads/past-releases/logstash-7-10-2
https://www.elastic.co/cn/downloads/past-releases/filebeat-7-10-2
https://github.com/mobz/elasticsearch-head
全文检索流程
-
创建索引
1 采集数据
2 创建文档对象
把原始文档进行封装Document对象
其中包含多个field
每个field可以自定义一个名称,不同的Document中可以有不同的field
3 分析文档
对其中需要分析的field进行分析处理
分词:进行关键词拆分
去除标点符号,合并相同的单词
去除停用词
转换大小写
最终得到一个单词列表
其中并不是所有的field都需要分析,例如文件的路径
单词列表中,其中一个关键词就是一个term
4 创建索引
其中包含三部分内容:- 索引:基于关键词(term)创建的。
- 文档对象:Document,第二步封装好的Document对象。
- 关键词和文档的对应关系
-
查询索引
1.用户接口 用户输入查询内容 输入可以是一个关键词,也可以是一句话
2.封装查询条件 需要把用户输入的内容进行分词处理,得到一个单词列表 需要指定要查询的field 查询条件:field:value
3.执行查询 在索引中根据查询条件查询对应的字段,找到对应的关键词。如果关键词在索引中存在就能查询到结果,如果不存在就没有结果。 根据关键词找到对应的文档id列表,根据文档id查询到对应的Document对象
4.展示结果 关键词的高亮显示,分页处理,根据相关度进行排序
ElasticSearch介绍
开源的高扩展的分布式全文检索引擎
使用Lucene作为其核心来实现所有索引和搜索的功能
ElasticSearch是面向文档型数据库,一条数据在这里就是一个文档
使用JSON作为文档序列化的格式
但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性
ElasticSearch应用场景
网站搜索:关键词搜索
数据预警:第三方插件:wathcer监控数据
数据分析:使用ES存储分析海量数据(对日志的存储和分析,也是比较适合)
日志分析:ELK经典组合:ElasticSearch + logstash + kibana
elasticsearch安装
sudo chown username:username elasticsearch-7.10.2-linux-x86_64.tar.gz
sudo tar zxf elasticsearch-7.10.2-linux-x86_64.tar.gz
在bin目录下./elasticsearch -d
启动
ps aux|grep elastic
kill -9 xx
执行dmesg -T | tail
查看最后几条内核日志,或使用journalctl -xb | egrep -i 'killed process'
来搜索被杀死进程的日志。
使用top或htop命令
实时监控进程的内存占用情况。特别是关注那些占用内存较大的进程,看是否有异常增长。
查看Elasticsearch的配置文件(如jvm.options
),确保JVM内存设置(如-Xms和-Xmx)合理,不会超出系统可用内存的范围。
curl 127.0.0.1:9200
ifconfig
允许远程访问
vim elasticsearch.yml
network.host: 0.0.0.0
es即便是单机版,也是当作集群来处理,得知道集群中其他节点都有哪些
discovery.seed_hosts:[""]
设置vm.max_map_count 的值
ERROR: [1] bootstrap checks failed
[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
这个问题表明系统配置中 vm.max_map_count 的值太低,无法满足 Elasticsearch 的需求。vm.max_map_count 参数定义了进程可以拥有的最大虚拟内存区域数量,这对于 Elasticsearch 的正常运行至关重要,因为它需要大量的内存映射区域来管理其索引数据。
要解决这个问题,需要增加 vm.max_map_count 的值。可以按照以下步骤操作:
临时设置(重启后失效):
打开终端,输入以下命令来临时增加 vm.max_map_count 的值:
sudo sysctl -w vm.max_map_count=262144
永久设置(需要修改配置文件):
编辑 /etc/sysctl.conf 文件,添加或修改以下行:
vm.max_map_count=262144
保存文件后,运行以下命令使更改生效:
sudo sysctl -p
elasticsearch-head
允许跨域
node -v
npm start
vim elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: "*"
kibana
tar zxf kibana-7.10.2-linux-x86_64.tar.gz
vim kibana.yml
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"]
./kibana