准备
介绍一下本机实验环境:
jdk 8 安装(java语言开发),无关紧要;
node.js安装 -> npm -v安装,之前安装过:参考VUE脚手架:VUE的路由使用说明和基于Hbuilder-x的环境部署及相关问题解决方案。
前言
Solr(读作“solar”)是Apache Lucene项目的开源企业搜索平台。Lucene只是一个框架。Solr在传统搜索中优于ES,其支持格式更多,功能更多,毕竟一个2004年一个2010诞生的。但是在实时建立索引的时候
,solr会产生IO阻塞,故而ES更适合实时查询,能达到准实时搜索。
ES:分关系型数据库。Elasticsearch和MongoDB/Redis/Memcache一样,是非关系型数据库。ES7自带JDK11所以不用担心jdk。
使用搜索引擎的原因:数据的SQL模糊查询:like %太慢。想起之前在校学数据结构用KMP算法模糊查询,留下泪水。
ELK:Elasticsearch是个开源分布式搜索引擎 + Logstash日志采集 + Kibana提供Web管理界面;
安装
kibana启动失败
报错
log [03:49:45.930] [error][data][elasticsearch] [TimeoutError]: Request timed out
log [03:49:45.979] [error][savedobjects-service] `Unable to retrieve` version information from Elasticsearch nodes.
log [03:47:45.453] [warning][actions][actions][plugins] APIs are disabled due to the Encrypted Saved Objects plugin using an ephemeral encryption key. Please set `xpack.encryptedSavedObjects.encryptionKey` in kibana.yml.
log [03:47:45.479] [warning][alerting][alerts][plugins][plugins] APIs are disabled due to the Encrypted Saved Objects plugin using an ephemeral encryption key. Please set xpack.encryptedSavedObjects.encryptionKey in kibana.yml.
连接ES无误
追加ssl配置
访问kabana
Kibana
查询语法
ES基于Lucene(配置繁杂,必须要用java开发,且不支持集群环境,索引库和应用所在同一个服务器,共同占用硬盘)。上述Lucene的缺点和问题,ES都能解决。
设置密码
1、在es安装的config目录下编辑elasticsearch.yml:
# ---------------------------------- Authority -----------------------------------
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
2、在es安装的bin目录下通过cmd执行elasticsearch-service.bat文件:逐个输入对应密码;
3、可以在kabana的配置文件kabana.yml中添加如下:
elasticsearch.username: "elastic"
elasticsearch.password: "root123456"
ES和Solr
Solr:当单纯的对已有数据进行搜索时,Solr更快。
ES Advantage:当实时建立索引时,Solr会产生io阻塞,查询性能较差,ElasticSearch具有明显的优势。
ES VS 关系型数据库(DB)
关系型数据库 | Database(数据库) | Table(表) | Row(行) | Column(列) |
---|---|---|---|---|
ElasticSearch | Index(索引库) | Type(类型,7之后被删除了,跟后面的Type不是一个概念) | Document(文档) | Field(字段) |
分布式管理
Solr使用ZK进行管理,而ES自身带有分布式协调管理功能;
Solr支持更多格式的数据:比如:JSON、XML、CSV,而ES仅支持Json文件格式;
Solr在传统的搜索应用中表现好于ElasticSearch,但在处理实时搜索应用时效率明显低于ElasticSearch。
Lucene全文检索框架
通过一个程序扫描文本中的每一个单词,针对单词建立索引
,并保存单词在文本中的位置,以及出现的次数。
用户查询时,通过之前建立好的索引来查询,将索引中的单词对应的文本位置,出现的次数返回给用户,因为有了具体文本的位置,所以就可以将具体内容取出来了。
倒排索引
正排索引:以ID去找关键词。
这样子效率太低,且互联网不可计数的数据量不适用。
分词 -> 去重 -> 倒排索引;
去重的过程中,获得单词的出现的文本id;
以关键词作为索引,去找id。这就是倒排索引
。
所以,搜索引擎会将正向索引重新构建为倒排索引,即把文件ID对应到关键词的映射转换为关键词到文件ID的映射,每个关键词都对应着一系列的文件,这些文件中都出现这个关键词。
得到倒排索引的结构如下:
“关键词1”:“文档1”的ID,“文档2”的ID,…………。
“关键词2”:带有此关键词的文档ID列表。
注意
Linux安装ES不能用root来建立,需要普通用户。
IK分词器
默认的英文分词器不适合中文:被分成一个个字。所以用IK分词器。
IK分词器的使用:
https://github.com/medcl/elasticsearch-analysis-ik/releases找到与自己的ES相同的版本。
第二步:解压到ES的plugins目录下,命名我IK。
重新启动es:发现起不来,查看日志:
[2021-03-16T10:16:06,065][ERROR][o.e.b.Bootstrap ] [DESKTOP-S3SN16R] Exception
java.lang.IllegalStateException: Could not load plugin descriptor for plugin directory [elasticsearch-analysis-ik-7.10.2.zip]
at org.elasticsearch.plugins.PluginsService.readPluginBundle(PluginsService.java:407) ~[elasticsearch-7.10.2.jar:7.10.2]
把plugins里面的zip包给删除。
第一次使用
点击面板中的“Dev Tools”按钮,进入 Dev 工具,开始我们的 Elasticsearch初次访问之旅。
http://localhost:5601/app/kibana#/dev_tools/console?_g=()
注意
:_analyze是保留方法,其analyer填写分词器类型。
GET _search
{
"query": {
"match_all": {}
}
}
POST _analyze
{
"analyzer": "ik_smart",
"text": "我不害怕明天,因为我经历过昨天,又热爱今天。"
}
POST _analyze
{
"analyzer": "standard",
"text": "I am not afraid of tomorrow for I have seen yesterday and love today. "
}
中英文分词情况
英文使用默认分词器(standard)->中文使用默认分词器(standard)->中文IK分词器(ik_smart)。