索引库操作
在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文档,
{"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进行。
创建索引
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" }}}}}
}
创建文档
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 /my_index/_doc/1
更新文档
POST /my_index/_doc/1/_update
{"doc": {"weight": 72.0}
}
删除文档
DELETE /my_index/_doc/1
删除索引
DELETE /my_index
总结
- 创建索引: 使用 PUT 请求来定义索引及其映射。
- 创建文档: 使用 POST 请求将数据添加到索引。
- 读取文档: 使用 GET 请求获取特定文档。
- 更新文档: 使用 POST 加上 _update 操作来修改现有文档。
- 删除文档: 使用 DELETE 请求删除指定文档。
- 删除索引: 使用 DELETE 请求删除整个索引。
文档操作
在Elasticsearch中,可以通过RESTful API对文档进行增、删、改、查等操作。
添加文档(创建)
使用 POST 请求向索引中添加新的文档。每个文档都是一个JSON对象。
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 请求读取特定的文档。
GET /my_index/_doc/1
也可以使用搜索功能查找多个文档:
GET /my_index/_search
{"query": {"match": {"name.firstName": "John"}}
}
修改文档
在Elasticsearch中,修改文档可以通过全量修改和局部修改两种方式进行:
1. 全量修改
全量修改会直接覆盖原来的文档内容。使用 PUT 请求来实现。
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"}
}
2. 局部修改
局部修改只会修改文档中的部分字段,而不影响其他字段。使用 POST 请求加上 _update 操作来实现。
POST /my_index/_doc/1/_update
{"doc": {"weight": 72.0,"isMarried": false}
}
在这个例子中,只有 weight 和 isMarried 字段被更新,其他字段保持不变。
总结
- 全量修改: 使用 PUT 请求,覆盖整个文档。
- 局部修改: 使用 POST 请求加 _update,仅修改指定的字段。
删除文档
使用 DELETE 请求删除特定的文档。
DELETE /my_index/_doc/1
批量操作
Elasticsearch支持批量操作,可以一次性添加、更新或删除多个文档。使用 _bulk API。
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" } }