Elasticsearch 核心概念
ElasticSearch
Elasticsearch 是一种开源的搜索和分析引擎,专门用于处理大规模的数据,并以非常快的速度进行搜索和分析。它基于一个叫做 Apache Lucene 的库构建,但与 Lucene 相比,Elasticsearch 提供了更多的功能和易用性,使其成为处理和分析数据的强大工具。
- 开源:Elasticsearch 是开源的,这意味着它的代码是公开的,任何人都可以使用和修改它。开源社区的力量使得 Elasticsearch 不断改进和更新。
- 分布式:Elasticsearch 天生支持集群分布式部署,能够运行在多台服务器上,并把数据分布存储在这些服务器上。这种设计使它能够处理非常大的数据集,并且即使一台服务器出现问题,其他服务器仍然可以继续工作。Elasticsearch 采用分布式架构设计,数据被分成多个分片(shards)并分布存储在多个节点上。每个分片可以有一个或多个副本(replicas),以提高数据的可用性和容错性。
- 分片:将数据分成更小的块,分布在集群中的不同节点上,提高查询和索引的性能。
- 副本:每个分片可以有多个副本,分布在不同节点上,确保数据的高可用性和容错性。
这种分布式设计使得 Elasticsearch 能够轻松扩展,通过增加节点来处理更多的数据和更高的查询负载。
- 基于 Apache Lucene:Lucene 是一个非常强大的搜索库,但直接使用 Lucene 需要编写大量代码。Elasticsearch 使 Lucene 变得更容易使用,提供了一个简单的接口和许多额外的功能,使构建搜索和分析应用程序变得更加简单。
- 近实时(Near Real-Time):Elasticsearch 的一个重要特点是它的近实时搜索能力。当数据被存储到 Elasticsearch 中后,几乎立即就可以被搜索到。这对需要处理和分析实时数据的应用非常有用,比如日志监控系统。
在了解 Elasticsearch 的过程中,索引(Index)和文档(Document)是两个最基本也是最重要的概念。理解它们的作用和关系,有助于更好地掌握如何使用 Elasticsearch 存储、搜索和分析数据。
> 索引在 Elasticsearch 中是一个存储结构,用来组织和存储数据。你可以把它看作一个数据库或一个文件夹,其中包含了多个文档。每个索引都有一个唯一的名字,用于在操作数据时进行引用。
- 在传统的关系数据库中,数据库是存储表的容器。
- 在 Elasticsearch 中,索引是存储文档的容器。类似于关系型数据库(MySQL)中的数据库和表的组合体。
索引在 Elasticsearch 中是一个逻辑存储单元,类似于关系型数据库中的“数据库”概念。它是一个文档的集合,这些文档具有相似的特性或属于同一逻辑分类。每个索引可以包含多种类型的文档,而这些文档具有类似的结构。
索引可以包含一个或多个分片(Shards),每个分片都是一个 Lucene 实例,可以独立地进行搜索和存储操作。分片允许 Elasticsearch 在多个服务器上水平扩展,从而处理更多的数据和查询。
每个分片可以有零个或多个副本(Replicas),副本是分片的完整拷贝,用于提供数据的冗余和容错性。当某个分片所在的服务器出现故障时,可以从其副本中恢复数据。
> 文档是 Elasticsearch 中的数据单位。每个文档是一组键值对(键是字段名,值是字段值),并且存储在某个索引中。文档的格式通常是 JSON 格式,这使得它非常灵活和易于使用。
- 在传统的关系数据库中,表中的一行就是一条记录。
- 在 Elasticsearch 中,索引中的一个文档就是一个数据条目。
以下是关于 Elasticsearch 文档的一些重要概念和特点:
- 结构化数据:文档是结构化的数据对象,由多个字段组成。每个字段都有一个名称和对应的值,可以是简单的数据类型(如文本、数字、日期等)或复杂的数据结构(如嵌套对象、数组等)。
- 唯一标识:每个文档都有一个唯一标识符(ID),用于在索引中唯一标识该文档。ID 可以由 Elasticsearch 自动生成,也可以由用户指定。
- 索引存储:文档被存储在索引中,每个索引可以包含多个文档。索引是文档的集合,类似于关系型数据库中的表。
- 字段映射:文档的字段映射定义了每个字段的数据类型、分析器等属性。字段映射可以手动指定,也可以由 Elasticsearch 根据插入的文档自动推断生成。
- 全文搜索:Elasticsearch 支持全文搜索,可以对文档中的文本字段进行全文检索。全文搜索可以根据关键词、词语匹配度等条件快速定位到符合条件的文档。
- CRUD 操作:文档支持 CRUD 操作,即创建(Create)、读取(Retrieve)、更新(Update)和删除(Delete)。通过 Elasticsearch 的 API 可以对文档进行增删改查操作。
- 版本控制:Elasticsearch 支持文档的版本控制,每个文档可以有多个版本。当对文档进行更新操作时,Elasticsearch 会自动创建新版本,并保存历史版本的数据。
文档是 Elasticsearch 中存储和组织数据的基本单位,具有灵活的数据模型、强大的全文搜索和分析功能,是构建分布式搜索引擎和分布式数据存储系统的核心组件之一。
> 索引与文档的关系类似于数据库与记录(相当于 MySQL 中的行(Row))的关系。一个索引包含多个文档,而每个文档属于某个索引。
GET _search
{
"query": {
"match_all": {}
}
}
################################# 索引相关操作 ######################################
# 查看当前节点的所有索引 GET _cat/indices?v
GET _cat/indices?v
# 列出每个 Index 所包含的 Type
# 根据规划,Elastic 6.x 版只允许每个 Index 包含一个 Type,7.x 版将彻底移除 Type。
GET _mapping?pretty=true
# 查询指定索引 GET /索引名称
GET /accounts
GET /products
# 新建索引Index PUT /索引名称 [{mappings:{}}]
PUT /weather
# 新建索引并带有mappings参数
PUT /products
{
"mappings": {
"properties": {
"name": {
"type": "text",
"analyzer": "standard"
},
"desc": {
"type": "text",
"analyzer": "standard"
},
"price": {
"type": "float",
"index": false
},
"type":{
"type": "keyword",
"index": false
}
}
}
}
# 新增文档时如果索引不存在则自动创建索引(所以应留意索引名称不要写错)
# 新增索引accounts文档名称为person,默认为_doc
PUT /accounts/person/0001
{
"username": "张珊",
"password": "password",
"sex": "women",
"age": 16
}
# 修改索引 一旦创建,无法修改mapping。但是却允许添加新的字段到mapping中,因为不会对倒排索引产生影响
PUT /products/_mapping
{
"properties": {
"newField": {
"type": "boolean"
}
}
}
# 删除索引
DELETE /products
# 分词 使用标准分词器
GET /_analyze
{
"analyzer": "standard",
"text": "Elasticsearch 是一种开源的搜索和分析引擎,专门用于处理大规模的数据,并以非常快的速度进行搜索和分析。"
}
# 分词 使用IK分词器 ik_smart ik_max_word
GET /_analyze
{
"analyzer": "ik_smart",
"text": "Elasticsearch 是一种开源的搜索和分析引擎,专门用于处理大规模的数据,并以非常快的速度进行搜索和分析。我是测试语句宏杉科技公司。"
}
################################# 文档相关操作 ######################################
# 创建文档 POST /{索引库名}/_doc/文档id
POST /products/_doc/10001
{
"name": "iphone",
"desc": "这是一部智能手机。",
"price": 6999,
"type": "数码",
"newField": true
}
# POST可不指定ID,自动生成 比如sc7z6JoBLjhzI62VtAAu
POST /products/_doc
{
"name": "xiaopeng",
"desc": "这是一台新能源汽车。",
"price": 166999,
"type": "汽车",
"newField": true
}
# PUT 必须指定ID 相当于走的是修改中全量修改
PUT /products/_doc/10002
{
"name": "KFC",
"desc": "这是吃的。",
"price": 69,
"type": "饮食",
"newField": true
}
PUT /products/_doc/10003
{
"name": "方便面",
"desc": "吃的食品。",
"price": 10,
"type": "饮食",
"newField": true
}
# 查询文档 GET /{索引库名}/_doc/文档id
GET /accounts/person/0001
GET /products/_doc/sc7z6JoBLjhzI62VtAAu
GET /products/_doc/10002
# 删除文档 DELETE /{索引库名}/_doc/文档id
DELETE /products/_doc/10002
DELETE /accounts/person/0001
# 修改文档:全量修改/增量修改
# 全量修改 PUT /{索引库名}/_doc/文档id 注意:可以删除减少/添加增加字段
# 如果id为新的那么相当于新增文档
PUT /accounts/person/0001
{
"username": "李四",
"password": "123456",
"sex": "men",
"age": 18,
"address": "tst"
}
# 增量修改 POST /{索引库名}/_update/文档id { "doc": {字段}}
POST /products/_update/10001
{
"doc": {
"price": 10999
}
}
GET /products/_doc/10001
################################# 数据查询 ####################################
# 查询全部数据 GET /索引名称/文档名称(默认_doc)/_search
# 返回数据中took字段表示该操作的耗时(单位为毫秒),timed_out字段表示是否超时,hits字段表示命中的记录,max_score最高的匹配程度
GET products/_doc/_search
GET accounts/person/_search
################################# 全文搜索 ##################################
GET /products/_doc/_search
{
"query":{
"match": {
"desc": "吃的"
}
}
}
# size 查询数量 from 起始索引
GET /products/_doc/_search
{
"query":{
"match": {
"desc": "这是"
}
},
"size": 2,
"from": 2
}
# or
GET /products/_doc/_search
{
"query":{
"match": {
"desc": "吃的 手机"
}
}
}
# and
# [match] query doesn't support multiple fields, found [desc] and [price]
GET /products/_doc/_search
{
"query":{
"match": {
"desc": "吃的",
"price": 56
}
}
}
GET /products/_doc/_search
{
"query":{
"bool": {
"must": [
{
"match": {
"desc": "吃的"
}
},
{
"match": {
"name": "KFC1"
}
}
]
}
}
}
# and 必须包含所有分词
GET /products/_doc/_search
{
"query": {
"match": {
"desc": {
"query": "吃品",
"operator": "and"
}
}
}
}
# 多字段搜索
GET /products/_doc/_search
{
"query": {
"multi_match": {
"query": "面",
"fields": ["name", "desc"]
}
}
}
# 高亮显示
GET /products/_doc/_search
{
"query": {
"match": {"desc": "吃的"}
},
"highlight": {
"fields": {
"desc": {
"pre_tags": ["<strong>"],
"post_tags": ["</strong>"]
}
}
}
}
# 更多搜索https://jishuzhan.net/article/1943626551773409282
本站所发布的一切软件资源、文章内容、页面内容可能整理来自于互联网,在此郑重声明本站仅限用于学习和研究目的;并告知用户不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
如果本站相关内容有侵犯到您的合法权益,请仔细阅读本站公布的投诉指引页相关内容联系我,依法依规进行处理!
作者:理想
链接:https://www.imyjs.cn/archives/1509
共有 0 条评论