6.1 新建文档
index/type/id
(1)一般格式
PUT blog/csdn/1
{
"id":1,
"title":"Elasticsearch简介",
"author":"chengyuqiang",
"content":"Elasticsearch是一个基于Lucene的搜索引擎"
}
响应结果如下:
{
"_index": "blog",
"_type": "csdn",
"_id": "1",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 2,
"failed": 0
},
"created": true
}
名称 | 参数 | 说明 |
---|---|---|
blog | _index | 索引名 |
csdn | _type | 类型名 |
1 | _id | 文档ID |
1 | _version | 版本号 |
继续添加一条数据
POST blog/csdn/2
{
"id":2,
"title":"Git简介",
"author":"chengyuqiang",
"content":"Git是一个版本控制软件"
}
响应
{
"_index": "blog",
"_type": "csdn",
"_id": "2",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 2,
"failed": 0
},
"created": true
}
(2)未指定文档ID
POST blog/csdn
{
"id":3,
"title":"Java编程",
"author":"chengyuqiang",
"content":"Java面向对象程序设计"
}
响应:
{
"_index": "blog",
"_type": "csdn",
"_id": "wkv472AB5R2olyYk97rN",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 0,
"_primary_term": 1
}
6.2 获取文档
GET blog/csdn/1
响应
{
"_index": "blog",
"_type": "csdn",
"_id": "1",
"_version": 1,
"found": true,
"_source": {
"id": 1,
"title": "Elasticsearch简介",
"author": "chengyuqiang",
"content": "Elasticsearch是一个基于Lucene的搜索引擎"
}
}
获取不存在的文档
GET blog/csdn/100
HEAD blog/csdn/1
响应:
200 - OK
HEAD blog/csdn/100
响应
404 - Not Found
一次获取多个文档
GET blog/csdn/_mget
{
"ids":["1","2"]
}
响应:
{
"docs": [
{
"_index": "blog",
"_type": "csdn",
"_id": "1",
"_version": 1,
"found": true,
"_source": {
"id": 1,
"title": "Elasticsearch简介",
"author": "chengyuqiang",
"content": "Elasticsearch是一个基于Lucene的搜索引擎"
}
},
{
"_index": "blog",
"_type": "csdn",
"_id": "2",
"_version": 1,
"found": true,
"_source": {
"id": 2,
"title": "Git简介",
"author": "chengyuqiang",
"content": "Git是一个版本控制软件"
}
}
]
}
6.3 文档搜索
简单介绍一下文档搜索,作为ElasticSearch的重头戏,搜索后续会有章节详细介绍
(1)检索全部文档
GET blog/_search
(2)term查询
term查询用于查找指定字段中包含指定分词的文档,只有当查询分词和文档中的分词精确匹配时才被检索到。
GET blog/_search
{
"query": {
"term": {
"title": "程"
}
}
}
由于未使用IK中文分词,每个汉字被看做独立的一个词。
{
"took": 3,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.2876821,
"hits": [
{
"_index": "blog",
"_type": "csdn",
"_id": "wkv472AB5R2olyYk97rN",
"_score": 0.2876821,
"_source": {
"id": 3,
"title": "Java编程",
"author": "chengyuqiang",
"content": "Java面向对象程序设计"
}
}
]
}
}
当查询”程序”时,title字段中找不到这样的分词,默认汉字被分为单字词。
GET blog/_search
{
"query": {
"term": {
"title": "程序"
}
}
}
响应
{
"took": 5,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 0,
"max_score": null,
"hits": []
}
}
(3)terms查询
查询文档汇总包含多个词的文档
GET blog/_search
{
"query": {
"terms": {
"title": ["java","git"]
}
}
}
注意,经过分词后英文单词变成了小写,比如”Java”词项变成了”java”
{
"took": 17,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 1,
"hits": [
{
"_index": "blog",
"_type": "csdn",
"_id": "2",
"_score": 1,
"_source": {
"id": 2,
"title": "Git简介",
"author": "chengyuqiang",
"content": "Git是一个版本控制软件"
}
},
{
"_index": "blog",
"_type": "csdn",
"_id": "wkv472AB5R2olyYk97rN",
"_score": 1,
"_source": {
"id": 3,
"title": "Java编程",
"author": "chengyuqiang",
"content": "Java面向对象程序设计"
}
}
]
}
}
(4)match查询
与term精确查询不同,对于match查询,只要被查询字段中存在任何一个词项被匹配,就会搜索到该文档。
GET blog/_search
{
"query": {
"match": {
"title": {
"query": "程序"
}
}
}
}
响应:
{
"took": 37,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.2876821,
"hits": [
{
"_index": "blog",
"_type": "csdn",
"_id": "wkv472AB5R2olyYk97rN",
"_score": 0.2876821,
"_source": {
"id": 3,
"title": "Java编程",
"author": "chengyuqiang",
"content": "Java面向对象程序设计"
}
}
]
}
}
6.4 更新文档
(1)更新数据
文档在ElasticSearch中是不可变的,不能修改/如果问哦们需要修改文档,ElasticSearc实际上重建新文档替换掉旧文档
POST blog/csdn/2
{
"id":2,
"title":"Git简介",
"author":"hadron",
"content":"Git是一个分布式版本控制软件"
}
执行结果:
{
"_index": "blog",
"_type": "csdn",
"_id": "2",
"_version": 2,
"result": "updated",
"_shards": {
"total": 2,
"successful": 2,
"failed": 0
},
"created": false
}
注意:
- 版本(_version)加1。
- created标识为 false,因为同索引同类型下已经存在同ID的文档。
- 在ES内部,_version为1的文件已经被标记“删除”,并添加了一个完整的新文档。旧文档不会立即消失,但是不能再访问它。
查询:
GET blog/csdn/2
{
"_index": "blog",
"_type": "csdn",
"_id": "2",
"_version": 2,
"found": true,
"_source": {
"id": 2,
"title": "Git简介",
"author": "hadron",
"content": "Git是一个分布式版本控制软件"
}
}
6.5 删除文档
DELETE blog/csdn/1
{
"found": true,
"_index": "blog",
"_type": "csdn",
"_id": "1",
"_version": 4,
"result": "deleted",
"_shards": {
"total": 2,
"successful": 2,
"failed": 0
}
}