Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上。 Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库—无论是开源还是私有。
但是 Lucene 仅仅只是一个库。为了充分发挥其功能,你需要使用 Java 并将 Lucene 直接集成到应用程序中。 更糟糕的是,您可能需要获得信息检索学位才能了解其工作原理。Lucene 非常 复杂。
Elasticsearch 也是使用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目的是使全文检索变得简单, 通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API。
然而,Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎。 它可以被下面这样准确的形容:
- 一个分布式的实时文档存储,每个字段 可以被索引与搜索
- 一个分布式实时分析搜索引擎
- 能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据
比如我们在搜索引擎上搜索某个事物,比如我们搜索 “嬴政”,则会出现跟秦始皇相关的很多信息,这些信息中比如有一条是这样描述:
秦始皇嬴政,中国第一个皇帝。
秦始皇,病死于沙丘。
以上的语句我们如果以结构化的表示,如下:
name:嬴政,job:皇帝,order:第一,alias:秦始皇 ... ...
以上的描述我们可以用数据库进行存储到某个表,比如 t_figure 人物表。可通过某个字段进行查询。结构化的数据存储之前需要进行结构的分析才能存储,但是一旦存储很容易搜索。
但实际生活当中,我们得到的信息往往就是上面的一句话,而且每段话都不一样,无法按照固定的格式进行结构化的数据展示。也就是说进行结构化的转换很麻烦,所以大部分的信息可以直接将这段话进行存储。非结构化的数据存储方便,但是查找起来比较难。正常的查找方式都是整段话去匹配,搜索导致效率很低。
倒排索引的主要思想是将这段话进行分词,比如我们的这段话进行分词后为:秦始皇/嬴政/中国/第一个/皇帝/病死/沙丘。将这些信息做成倒排索引如下
词条 | 所在文档 |
---|---|
秦始皇 | 文档1、文档2 |
嬴政 | 文档1 |
中国 | 文档1 |
第一个 | 文档1 |
皇帝 | 文档1 |
病死 | 文档2 |
沙丘 | 文档2 |
文档1即为第一句话,文档2即为第二句话。
这样,当我们搜索秦始皇的时候,就返回文档1和文档2的内容。其他词条依此内推。
以上面的示例为例,词条的每一行都是Elastic中的索引,每个索引可以对应多个文档。我们可以对比我们的结构化数据库的概念来协助理解Elasticsearch的索引和文档的概念。
数据库 | Elastic | 描述 |
---|---|---|
表 | 索引 index | 索引类似于表,每个索引就是一张表 |
行 | 文档 doc | 每个文档就像每行数据 |
列 | 文档中的字段 Field | 字段(Field),就是JSON文档中的字段,类似数据库中的列(Column) |
模式schema | 映射 Mapping | Mapping(映射)是索引中文档的约束,例如字段类型约束。类似数据库的表结构(Schema) |
SQL | DSL | DSL是elasticsearch提供的JSON风格的请求语句,用来操作elasticsearch,实现CRUD |
官方文档地址:https://www.elastic.co/guide/en/elasticsearch/reference/8.6/getting-started.html
最新版本下载地址:https://www.elastic.co/cn/downloads/elasticsearch
本文的下载版本为:elasticsearch-8.6.2-linux-x86_64.tar.gz (8.6.2)
解压后的目录如下:
建议更改配置目录、数据目录和日志目录的默认位置 这些配置都在 elasticsearch.yml 中。
./bin/elasticsearch
首次启动 Elasticsearch 时,默认情况下会启用和配置安全功能。以下配置会自动生成:
以上生成的内容大概如下:
The generated password for the elastic built-in superuser is:
<password>
The enrollment token for Kibana instances, valid for the next 30 minutes:
<enrollment-token>
The hex-encoded SHA-256 fingerprint of the generated HTTPS CA DER-encoded certificate:
<fingerprint>
You can complete the following actions at any time:
Reset the password of the elastic built-in superuser with
'bin/elasticsearch-reset-password -u elastic'.
Generate an enrollment token for Kibana instances with
'bin/elasticsearch-create-enrollment-token -s kibana'.
Generate an enrollment token for Elasticsearch nodes with
'bin/elasticsearch-create-enrollment-token -s node'.
注:elastic 的密码最好保存一下,我们接下来就会使用
直接在本地通过curl命令访问
curl --cacert /DATA/soft/es/elasticsearch-8.6.2/config/certs/http_ca.crt -u elastic https://localhost:9200
执行后输入 elastic 账号的密码,返回如下内容
{
"name" : "cspl-dev",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "iozzv0S0Q6mKwgNnfAA8Xw",
"version" : {
"number" : "8.6.2",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "2d58d0f136141f03239816a4e360a8d17b6d8f29",
"build_date" : "2023-02-13T09:35:20.314882762Z",
"build_snapshot" : false,
"lucene_version" : "9.4.2",
"minimum_wire_compatibility_version" : "7.17.0",
"minimum_index_compatibility_version" : "7.0.0"
},
"tagline" : "You Know, for Search"
}
我们也可以通过浏览器输入账号密码后直接访问
至此,单机安装并启动es就完成了。不过此启动方式是前台运行方式,使用Ctrl + C 即可关闭。
./bin/elasticsearch -d -p pid
pkill -F pid
注:因 pid 文件生成在 $ES_HOME 目录下,所以请在 $ES_HOME 目录下执行该命令
安装 Elasticsearch 时,会在 Elasticsearch 配置目录中生成以下证书和密钥,用于将 Kibana 实例连接到安全的 Elasticsearch 集群并加密节点间通信。
检索 http.p12
bin/elasticsearch-keystore show xpack.security.http.ssl.keystore.secure_password
检索 transport.p12
bin/elasticsearch-keystore show xpack.security.transport.ssl.keystore.secure_password