什么是索引库
它有点类似于mysql里面的表:
索引库的操作 也就 有点类似于表操作
在Elasticsearch (ES) 中,“索引”(Index)是指一种数据结构,用于存储和组织文档数据的集合。索引库(Index)是
Elasticsearch 中的一个核心概念,它类似于关系型数据库中的数据库或表的概念。索引库在 Elasticsearch
中用于存储、索引和搜索文档数据。它是由一个或多个分片(shard)组成的逻辑容器。每个分片都是一个独立的工作单元,它包含索引的一部分数据,并负责处理与该数据相关的搜索和存储操作。索引库在 Elasticsearch 中有以下特征和作用:
存储:索引库用于持久化存储文档数据。文档可以是以 JSON(JavaScript Object Notation)格式表示的任何结构化数据。
索引:索引库会对文档的字段进行索引,以便能够高效地进行搜索和检索操作。索引使用倒排索引(Inverted
Index)的数据结构,以提供快速的全文搜索能力。分片和复制:索引库可以被分为多个分片,并且每个分片可以有多个副本。分片和副本提供了数据的分布和冗余机制,以提高性能、可用性和容错性。
映射:索引库可以定义字段的映射,指定字段的数据类型和属性。映射定义了索引库如何解析和处理文档中的字段。
搜索:索引库支持各种类型的搜索操作,包括全文搜索、过滤、聚合和排序等。通过使用 Elasticsearch 提供的查询语言和
API,可以执行复杂的搜索操作。总之,索引库是 Elasticsearch 中用于存储和组织文档数据的核心概念,提供了高效的搜索和检索能力。它是构建
Elasticsearch 数据存储和搜索应用程序的基础。
就像数据库里面你先要有表才能往里面插入数据一样, ES中你得先有索引库才能往里面插入文档数据。
mapping 属性
索引库创建的关键 首先是定义mapping映射, 它是对ES文档的约束。
新手会好奇 既然要约束一个文档,那它有哪些属性可以约束呢?
在ES官方文档中 约束非常多 大家没必要都去死记硬背,遇到查询就好了。
这里介绍一些比较常见的:
-
type 字段数据类型 常见的简单类型有:
字符串:text(常见的可分词文本), keyword(精确值,不可分词的文本,比如国家名称 人名 品牌名)
数值类型:long integer short byte double float
布尔值:boolean
日期:date
对象:object
-
index:是否创建倒排索引 默认为true
- analyzer:分词器(一般只针对text)
- properties:该字段的子字段
创建索引库
创建索引库的语法 总体上一个json结构,通过上面的mapping属性来定义你的文档里面有哪些字段 有哪些内容,就像sql里面建表一样。
我们先实践 自己照着创建一个:
PUT /starcraft2
{
"mappings": {
"properties": {
"info":{
"type": "text",
"analyzer": "ik_smart"
},
"email":{
"type":"keyword",
"index":false
},
"name":{
"type": "object",
"properties": {
"firstName":{
"type":"keyword"
},
"lastName":{
"type":"keyword"
}
}
}
}
}
}
我们创建了一个索引库 定义了3个字段,每个字段都有它的属性和约束,我们的name字段 是object 它还有两个子字段,
这个过程是不是优点类似于数据库建表的感觉。
只不过我们这里是半结构化的数据
查看索引库
GET /库名
修改索引库
ES是不允许修改索引库的,因为这样会使得 倒排索引失效。
那我某个字段建错了 要改怎么办呢?
ES不能改现有字段,但是ES允许你添加新字段(不能和之前的字段重复)
比如给上面刚刚创建的那个库加个字段:
PUT /starcraft2/_mapping
{
"properties":{
"age":{
"type":"integer"
}
}
}