1、介绍
elasticsearch是一个开源的分布式搜索分析引擎,被用作全文检索、结构化搜索、分析这三个功能的组合。它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。
2、核心概念
1)index索引
一个索引就是一个拥有几分相似特征的文档集合,类比mysql中的数据库。
2)type类型(版本8之后废弃)
一个类型就是索引的一个逻辑上的分类或者分区,类比mysql中的表。
3)document文档
一个文档是一个可被索引的基础信息单元,文档以JSON的的格式表示,类比mysql中的一行数据。
4)filed字段
相当于数据表的字段,对文档数据根据不同属性进行的分类标识,类比mysql中列属性。
5)mapping映射
mapping是处理数据的方式和规则方面做一些限制,如某个字段的数据类型、默认值、分析器、是否被索引等等,这些都是映射里面可以设置的,其它就是处理es里面数据的一些使用规则设置也叫做映射,按着最优规则处理数据对性能提高很大,因此才需要建立映射,并且需要思考如何建立映射才能对性能更好。相当于mysql中的创建表的过程,设置主键外键等等
6)cluster集群
一个集群就是由一个或多个节点组织在一个,它们共同持有整个的数据,并一起提供索引和搜索功能。
7)node节点
一个节点是集群中的一个服务器,作为集群的一部分,它存储数据,参与集群的索引和搜索功能。
8)alias别名
一组数据流或者索引的二级名字
9)data stream 数据流
7.9版本的新特性,Data stream 使你可以跨多个索引存储只追加数据的时间序列数据,同时为请求提供唯一的一个命名资源。 data stream 非常适合日志,事件,指标以及其他持续生成的数据。
对比关系性数据库
注:*Type在8之后已经删除
3、安装和启动
安装步骤:
- 配置Java环境,不同版本对于JDK版本的要求不同
- 下载安装(macOS)
curl -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.7.1-darwin-x86_64.tar.gz curl https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.7.1-darwin-x86_64.tar.gz.sha512 | shasum -a 512 -c - tar -xzf elasticsearch-8.7.1-darwin-x86_64.tar.gz cd elasticsearch-8.7.1/
- 启动命令
./bin/elasticsearch
- 验证启动
curl --cacert $ES_HOME/config/certs/http_ca.crt -u elastic https://localhost:9200
可以看到如下返回
{
“name” : “Cp8oag6”,
“cluster_name” : “elasticsearch”,
“cluster_uuid” : “AT69_T_DTp-1qgIJlatQqA”,
“version” : {
“number” : “8.7.1”,
“build_type” : “tar”,
“build_hash” : “f27399d”,
“build_flavor” : “default”,
“build_date” : “2016-03-30T09:51:41.449Z”,
“build_snapshot” : false,
“lucene_version” : “9.5.0”,
“minimum_wire_compatibility_version” : “1.2.3”,
“minimum_index_compatibility_version” : “1.2.3”
},
“tagline” : “You Know, for Search”
}
出现输入用户名和密码情况,可以配置config/elasticsearch.yml中的xpack.security.enabled: false
4、客户端操作
-
使用Restful接口直接访问
Talend API tester或postman -
可视化工具
Kibana是一个针对ElasticSearch的开源分析及可视化平台,用来搜索、查看交互存储在ElasticSearch索引中的数据
5、API说明
索引相关API
创建索引
PUT http://localhost:9200/my_index
删除索引
DELETE http://localhost:9200/
获取索引
GET http://localhost:9200/
文档相关API
创建文档
PUT http://localhost:9200//_doc/<_id>
POST //_doc/
PUT //_create/<_id>
POST //_create/<_id>
删除文档
DELETE http://localhost:9200//_doc/<_id>
获取文档
GET http://localhost:9200//_doc/<_id>
HEAD /_doc/<_id>
GET /_source/<_id>
HEAD /_source/<_id>
查询相关API
GET http://localhost:9200//_search
GET /_search
POST //_search
POST /_search
//RequestBody可设置查询条件
更多可以参考:https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html
6、倒排索引
Elasticsearch 使用一种称为倒排索引的结构,它适用于快速的全文搜索。一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,有一个包含它的文档列表。
例如,假设我们有两个文档,每个文档的 content 域包含如下内容:
Welcome to China
This is a guest from China
为了创建倒排索引,我们首先将每个文档的 content 域拆分成单独的 词(我们称它为 词条 或 tokens ),创建一个包含所有不重复词条的排序列表,然后列出每个词条出现在哪个文档。结果如下所示:
现在,如果我们想搜索 from China ,我们只需要查找包含每个词条的文档:
两个文档都匹配,但是第二个文档比第一个匹配度更高。如果我们使用仅计算匹配词条数量的简单相似性算法 ,那么,我们可以说,对于我们查询的相关性来讲,第二个文档比第一个文档更佳。
除此之外,还要单词规范化、分词等问题,具体可以参考 https://www.elastic.co/guide/cn/elasticsearch/guide/current/inverted-index.html