Elasticsearch学习笔记(2)

索引库操作

在Elasticsearch中,Mapping是定义文档字段及其属性的重要机制。

Mapping映射属性

type:字段数据类型

1、字符串:

  • text:可分词的文本,适用于需要全文检索的情况。
  • keyword:用于存储精确值,如品牌、国家名、IP地址等,不进行分词。

2、数值:

  • long:64位整数。
  • integer:32位整数。
  • short:16位整数。
  • byte:8位整数。
  • double:双精度浮点数。
  • float:单精度浮点数。

3、布尔:boolean:只接受true或false。

4、日期:date:用于存储日期和时间,支持多种格式。

5、对象:object:用于嵌套结构,可以包含多个字段。

index:

指定该字段是否创建索引,默认为true。如果设置为false,该字段将不会被索引,无法用于检索。

analyzer:

指定字段使用的分词器,影响如何处理文本数据。例如,常用的分词器有standard、whitespace、simple等。

properties:

定义该字段的子字段,用于更复杂的结构,例如嵌套对象。

以下是一个示例JSON文档,

javascript 复制代码
{
  "age": 30,
  "weight": 70.5,
  "isMarried": true,
  "info": "这是一段关于个人信息的文本,需要进行分词处理。",
  "email": "example@example.com",
  "score": 95.5,
  "name": {
    "firstName": "John",
    "lastName": "Doe"
  }
}

对应的每个字段映射(Mapping):

索引库的CRUD

在Elasticsearch中,CRUD(创建、读取、更新和删除)操作可以通过RESTful API进行。

创建索引

bash 复制代码
PUT /my_index
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 1
  },
  "mappings": {
    "properties": {
      "age": { "type": "integer" },
      "weight": { "type": "float" },
      "isMarried": { "type": "boolean" },
      "info": { "type": "text" },
      "email": { "type": "keyword" },
      "score": { "type": "float" },
      "name": {
        "properties": {
          "firstName": { "type": "keyword" },
          "lastName": { "type": "keyword" }
        }
      }
    }
  }
}

创建文档

XML 复制代码
POST /my_index/_doc/1
{
  "age": 30,
  "weight": 70.5,
  "isMarried": true,
  "info": "这是一段关于个人信息的文本,需要进行分词处理。",
  "email": "example@example.com",
  "score": 95.5,
  "name": {
    "firstName": "John",
    "lastName": "Doe"
  }
}

读取文档

XML 复制代码
GET /my_index/_doc/1

更新文档

XML 复制代码
POST /my_index/_doc/1/_update
{
  "doc": {
    "weight": 72.0
  }
}

删除文档

XML 复制代码
DELETE /my_index/_doc/1

删除索引

XML 复制代码
DELETE /my_index

总结

  • 创建索引: 使用 PUT 请求来定义索引及其映射。
  • 创建文档: 使用 POST 请求将数据添加到索引。
  • 读取文档: 使用 GET 请求获取特定文档。
  • 更新文档: 使用 POST 加上 _update 操作来修改现有文档。
  • 删除文档: 使用 DELETE 请求删除指定文档。
  • 删除索引: 使用 DELETE 请求删除整个索引。

文档操作

在Elasticsearch中,可以通过RESTful API对文档进行增、删、改、查等操作。

添加文档(创建)

使用 POST 请求向索引中添加新的文档。每个文档都是一个JSON对象。

XML 复制代码
POST /my_index/_doc/1
{
  "age": 30,
  "weight": 70.5,
  "isMarried": true,
  "info": "这是一段关于个人信息的文本。",
  "email": "example@example.com",
  "score": 95.5,
  "name": {
    "firstName": "John",
    "lastName": "Doe"
  }
}

读取文档(查询)

使用 GET 请求读取特定的文档。

XML 复制代码
GET /my_index/_doc/1

也可以使用搜索功能查找多个文档:

XML 复制代码
GET /my_index/_search
{
  "query": {
    "match": {
      "name.firstName": "John"
    }
  }
}

修改文档

在Elasticsearch中,修改文档可以通过全量修改和局部修改两种方式进行:

  1. 全量修改

全量修改会直接覆盖原来的文档内容。使用 PUT 请求来实现。

XML 复制代码
PUT /my_index/_doc/1
{
  "age": 30,
  "weight": 70.5,
  "isMarried": true,
  "info": "这是一段关于个人信息的文本。",
  "email": "example@example.com",
  "score": 95.5,
  "name": {
    "firstName": "John",
    "lastName": "Doe"
  }
}
  1. 局部修改

局部修改只会修改文档中的部分字段,而不影响其他字段。使用 POST 请求加上 _update 操作来实现。

XML 复制代码
POST /my_index/_doc/1/_update
{
  "doc": {
    "weight": 72.0,
    "isMarried": false
  }
}

在这个例子中,只有 weight 和 isMarried 字段被更新,其他字段保持不变。

总结

  • 全量修改: 使用 PUT 请求,覆盖整个文档。
  • 局部修改: 使用 POST 请求加 _update,仅修改指定的字段。

删除文档

使用 DELETE 请求删除特定的文档。

XML 复制代码
DELETE /my_index/_doc/1

批量操作

Elasticsearch支持批量操作,可以一次性添加、更新或删除多个文档。使用 _bulk API。

XML 复制代码
POST /_bulk
{ "index": { "_index": "my_index", "_id": "2" } }
{ "age": 25, "weight": 60.0, "isMarried": false, "info": "另一段个人信息。", "email": "user2@example.com", "score": 88.0, "name": { "firstName": "Jane", "lastName": "Smith" } }
{ "update": { "_index": "my_index", "_id": "1" } }
{ "doc": { "score": 97.0 } }
{ "delete": { "_index": "my_index", "_id": "3" } }

总结

在Elasticsearch中,文档操作主要包括以下几种:

创建文档:

  • 请求方式:POST
  • 请求格式:/{索引库名}/_doc/文档id
  • 示例:POST /my_index/_doc/1 { "field": "value" }

查询文档:

  • 请求方式:GET
  • 请求格式:/{索引库名}/_doc/文档id
  • 示例:GET /my_index/_doc/1

删除文档:

  • 请求方式:DELETE
  • 请求格式:/{索引库名}/_doc/文档id
  • 示例:DELETE /my_index/_doc/1

修改文档:

全量修改:

  • 请求方式:PUT
  • 请求格式:/{索引库名}/_doc/文档id
  • 示例:PUT /my_index/_doc/1 { "field": "new_value" }

局部修改:

  • 请求方式:POST
  • 请求格式:/{索引库名}/_update/文档id
  • 示例:POST /my_index/_doc/1/_update { "doc": { "field": "updated_value" } }
相关推荐
EterNity_TiMe_22 分钟前
【论文复现】(CLIP)文本也能和图像配对
python·学习·算法·性能优化·数据分析·clip
sanguine__26 分钟前
java学习-集合
学习
lxlyhwl26 分钟前
【STK学习】part2-星座-目标可见性与覆盖性分析
学习
nbsaas-boot27 分钟前
如何利用ChatGPT加速开发与学习:以BPMN编辑器为例
学习·chatgpt·编辑器
dr李四维29 分钟前
iOS构建版本以及Hbuilder打iOS的ipa包全流程
前端·笔记·ios·产品运营·产品经理·xcode
CV学术叫叫兽1 小时前
一站式学习:害虫识别与分类图像分割
学习·分类·数据挖掘
我们的五年1 小时前
【Linux课程学习】:进程程序替换,execl,execv,execlp,execvp,execve,execle,execvpe函数
linux·c++·学习
一棵开花的树,枝芽无限靠近你2 小时前
【PPTist】添加PPT模版
前端·学习·编辑器·html
VertexGeek2 小时前
Rust学习(八):异常处理和宏编程:
学习·算法·rust
二进制_博客3 小时前
Flink学习连载文章4-flink中的各种转换操作
大数据·学习·flink