百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

ElasticSearch索引

toyiye 2024-06-21 11:57 10 浏览 0 评论

索引

1、基本介绍

ElasticSearch是文档型数据库,索引(Index)定义了文档的逻辑存储和字段类型,每个索引可以包含多个文档类型,文档类型是文档的集合,

文档以索引定义的逻辑存储模型,比如,指定分片和副本的数量,配置刷新频率,分配分析器等,存储在索引中的海量文档分布式存储在ElasticSearch集群中。

ElasticSearch是基于Lucene框架的全文搜索引擎,将所有文档的信息写入到倒排索引(Inverted Index)的数据结构中,倒排索引建立的是索引中词->文档之间的映射关系,在倒排索引中,数据是面向词(Term)而不是面向文档的。

ElasticSearch的对象模型,跟关系型数据库模型相比:

  • 索引(Index):相当于数据库,用于定义文档类型的存储;在同一个索引中,同一个字段只能定义一个数据类型;
  • 文档类型(Type):相当于关系表,用于描述文档中的各个字段的定义;不同的文档类型,能够存储不同的字段,服务于不同的查询请求;
  • 文档(Document):相当于关系表的数据行,存储数据的载体,包含一个或多个存有数据的字段;
  • 字段(Field):文档的一个Key/Value对;
  • 词(Term):表示文本中的一个单词;
  • 标记(Token):表示在字段中出现的词,由该词的文本、偏移量(开始和结束)以及类型组成;

注意ES每个大版本之间区别很大:

  • ES 5.x中一个index可以有多种type。
  • ES 6.x中一个index只能有一种type。
  • ES 7.x以后 要逐渐移除type这个概念。

2、索引操作

2.1创建索引

创建索引的语法是:

  • json中指定了分片和副本
PUT /book
{
 "settings": {
 "number_of_shards": 3, // 分片数量
 "number_of_replicas": 1 // 副本数量
 }
}

//响应

{
 "acknowledged" : true,
 "shards_acknowledged" : true,
 "index" : "book"
}

更新副本

PUT /book/_settings
{
 "number_of_replicas": 2
}

2.2 查看索引

查看索引有多个命令

GET /{索引名字}

GET /{索引名字}/_settings

GET /{索引名字1},{索引名字} // 多个索引

GET /_all/_settings // 所有索引

GET /book/_settings
响应
{
 "book" : {
 "settings" : {
 "index" : {
 "creation_date" : "1685374213814",
 "number_of_shards" : "3",
 "number_of_replicas" : "1",
 "uuid" : "RSp6a840TI2nbGU6sswqHw",
 "version" : {
 "created" : "7060299"
 },
 "provided_name" : "book"
 }
 }
 }
}

2.3 删除索引

DELETE /{索引名字}

2.4 索引的打开与关闭

Elasticsearch 中,索引是有打开和关闭状态的,关闭的索引,几乎不占用资源;

已经关闭的索引不可以进行读写;

  • POST /{索引名字}/_close // 关闭索引
  • POST /{索引名字}/_open // 开启索引
  • POST /_all/_close // 打开所有
  • POST /_all/_open // 关闭所有

2.5 更新副本

Elasticsearch 允许更新索引副本数量

2.6 索引别名

索引别名就是给一个索引或者多个索引起的另一个名字,下面为给索引book取别名为mybook

POST /_aliases
{
 "actions": [
 {
 "add": {
 "index": "book",
 "alias": "mybook"
 }
 }
 ]
}

查询索引别名

GET /_aliases

返回结果

{
  "book": {
    "aliases": {
      "mybook": {
        
      }
    }
  }
}

3、文档操作

文档是索引中数据的基本单位,类似于关系型数据库中的一条记录,文档的在ES中以json的数据格式存储。

3.1 创建文档

索引已经创建好了,接下来我们来创建文档,并添加数据。这里的文档可以类比为关系型数据库中的表数据,添加的数据格式为 JSON 格式

上面的数据创建后,由于没有指定数据唯一性标识(ID),默认情况下,ES 服务器会随机生成一个。

如果想要自定义唯一性标识,需要在创建时指定。推荐使用下面这种方式创建文档。

POST /shopping/_doc
{
 "title": "小米手机",
 "category": "小米",
 "images": "http://xiaomi.com",
 "price": 3999.00
}

响应

{
 "_index" : "shopping",
 "_type" : "_doc",
 "_id" : "fUljaIgBAWp6P_bPXRhC",
 "_version" : 1,
 "result" : "created",
 "_shards" : {
 "total" : 2,
 "successful" : 1,
 "failed" : 0
 },
 "_seq_no" : 0,
 "_primary_term" : 1
}

3.2查看单个文档:主键查询

3.3查看所有文档:全查询

# "query":这里的 query 代表一个查询对象,里面可以有不同的查询属性

# "match_all":查询类型,例如:match_all(代表查询所有), match,term , range 等等

# {查询条件}:查询条件会根据类型的不同,写法也有差异

3.4 修改文档中的全部字段

POST /shopping/_doc/fUljaIgBAWp6P_bPXRhC
{
 "title": "小米手机222",
 "category": "小米",
 "images": "http://xiaomi.com",
 "price": 3999.00
}

//响应

{
 "_index" : "shopping",
 "_type" : "_doc",
 "_id" : "fUljaIgBAWp6P_bPXRhC",
 "_version" : 2,
 "result" : "updated",
 "_shards" : {
 "total" : 2,
 "successful" : 1,
 "failed" : 0
 },
 "_seq_no" : 1,
 "_primary_term" : 1
}

3.5删除文档

删除一个文档不会立即从磁盘上移除,它只是被标记成已删除(逻辑删除)。在 Postman 中,向 ES 服务器发 DELETE 请求。

DELETE /shopping/_doc/fUljaIgBAWp6P_bPXRhC

4.映射相关操作

索引映射节(mappings)

索引结构

索引是由文档类型构成的,在mappings字段中定义索引的文档类型,示例代码中为blog索引定义了三个文档类型:articles,followers和comments

{
  "mappings": {
    "articles": {
      
    },
    "followers": {
      
    },
    "comments": {
      
    }
  }
}

字段的数据类型由字段的属性type指定,ElasticSearch支持的基础数据类型主要有:

  • 字符串类型:string;
  • 数值类型:字节(byte)、2字节(short)、4字节(integer)、8字节(long)、float、double;
  • 布尔类型:boolean,值是true或false;
  • 时间/日期类型:date,用于存储日期和时间;
  • 二进制类型:binary;
  • IP地址类型:ip,以字符串形式存储IPv4地址;
  • 特殊数据类型:token_count,用于存储索引的字数信息

字段的公共属性

  • index:该属性控制字段是否编入索引被搜索,该属性共有三个有效值:analyzed、no和not_analyzed:
  • analyzed:表示该字段被分析,编入索引,产生的token能被搜索到;
  • not_analyzed:表示该字段不会被分析,使用原始值编入索引,在索引中作为单个词;
  • no:不编入索引,无法搜索该字段;
  • 其中analyzed是分析,分解的意思,默认值是analyzed,表示将该字段编入索引,以供搜索。
  • store:指定是否将字段的原始值写入索引,默认值是no,字段值被分析,能够被搜索,但是,字段值不会存储,这意味着,该字段能够被查询,但是不会存储字段的原始值。
  • boost:字段级别的助推,默认值是1,定义了字段在文档中的重要性/权重;
  • include_in_all:该属性指定当前字段是否包括在_all字段中,默认值是ture,所有的字段都会包含_all字段中;如果index=no,那么属性include_in_all无效,这意味着当前字段无法包含在_all字段中。
  • copy_to:该属性指定一个字段名称,ElasticSearch引擎将当前字段的值复制到该属性指定的字段中;
  • doc_values:文档值是存储在硬盘上的索引时(indexing time)数据结构,对于not_analyzed字段,默认值是true,analyzed string字段不支持文档值;
  • fielddata:字段数据是存储在内存中的查询时(querying time)数据结构,只支持analyzed string字段;
  • null_value:该属性指定一个值,当字段的值为NULL时,该字段使用null_value代替NULL值;在ElasticSearch中,NULL 值不能被索引和搜索,当一个字段设置为NULL值,ElasticSearch引擎认为该字段没有任何值,使用该属性为NULL字段设置一个指定的值,使该字段能够被索引和搜索。


映射相关操作

查询文档映射

GET /{索引}/_mappings

响应(此映射为es根据文档创建的动态映射)

{
  "blog": {
    "mappings": {
      "properties": {
        "content": {
          "type": "text",
          //text类型"fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "title": {
          "type": "text",
          //text类型"fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        }
      }
    }
  }
}

创建静态映射

PUT /{索引名称}
{
  "properties": {
    "content": {
      "type": "text",
      "fields": {
        "keyword": {
          "type": "keyword",
          "ignore_above": 256
        }
      }
    },
    "title": {
      "type": "text",
      "fields": {
        "keyword": {
          "type": "keyword",
          "ignore_above": 256
        }
      }
    }
  }
}

创建索引并添加映射

PUT /{索引名称}
{
  "mappings": {
    "properties": {
      "name": {
        "type": "keyword"
      },
      "age": {
        "type": "integer"
      },
      "address": {
        "type": "text"
      }
    }
  }
}

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码