7.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
}
7.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
{
"_index": "blog",
"_type": "csdn",
"_id": "100",
"found": false
}
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是一个版本控制软件"
}
}
]
}
7.3 文档搜索
这里介绍一下简单的文档检索操作,后面章节会详细介绍。
(1)检索全部文档
GET blog/_search
{
"took": 5,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 3,
"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": "1",
"_score": 1,
"_source": {
"id": 1,
"title": "Elasticsearch简介",
"author": "chengyuqiang",
"content": "Elasticsearch是一个基于Lucene的搜索引擎"
}
},
{
"_index": "blog",
"_type": "csdn",
"_id": "wkv472AB5R2olyYk97rN",
"_score": 1,
"_source": {
"id": 3,
"title": "Java编程",
"author": "chengyuqiang",
"content": "Java面向对象程序设计"
}
}
]
}
}
(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面向对象程序设计"
}
}
]
}
}
7.4 更新文档
(1)更新数据
文档在Elasticsearch中是不可变的,不能修改。如果我们需要修改文档,Elasticsearch实际上重建新文档替换掉旧文档。
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
}
注意:
- 版本加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是一个分布式版本控制软件"
}
}
(2)更新字段
POST blog/csdn/2/_update
{
"script": {
"source": "ctx._source.cOntent=\"Git是一个开源的分布式版本控制软件\""
}
}
{
"_index": "blog",
"_type": "csdn",
"_id": "2",
"_version": 3,
"result": "updated",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 7,
"_primary_term": 1
}
查看更新后的文档
GET blog/csdn/2
{
"_index": "blog",
"_type": "csdn",
"_id": "2",
"_version": 3,
"found": true,
"_source": {
"id": 2,
"title": "Git简介",
"author": "hadron",
"content": "Git是一个开源的分布式版本控制软件"
}
}
(3)添加新字段
POST blog/csdn/1/_update
{
"script": "ctx._source.posttime=\"2018-01-09\""
}
{
"_index": "blog",
"_type": "csdn",
"_id": "1",
"_version": 2,
"result": "updated",
"_shards": {
"total": 2,
"successful": 2,
"failed": 0
}
}
查询更新后的文档
GET blog/csdn/1
{
"_index": "blog",
"_type": "csdn",
"_id": "1",
"_version": 2,
"found": true,
"_source": {
"id": 1,
"title": "Elasticsearch简介",
"author": "chengyuqiang",
"content": "Elasticsearch是一个基于Lucene的搜索引擎",
"posttime": "2018-01-09"
}
}
发现版本参数_version已经加1。
(2)查询更新
POST blog/_update_by_query
{
"script": {
"source": "ctx._source.category=params.category",
"lang":"painless",
"params":{"category":"git"}
},
"query":{
"term": {"title":"git"}
}
}
{
"took": 72,
"timed_out": false,
"total": 2,
"updated": 2,
"deleted": 0,
"batches": 1,
"version_conflicts": 0,
"noops": 0,
"retries": {
"bulk": 0,
"search": 0
},
"throttled_millis": 0,
"requests_per_second": -1,
"throttled_until_millis": 0,
"failures": []
}
7.5 删除文档
DELETE blog/csdn/1
{
"found": true,
"_index": "blog",
"_type": "csdn",
"_id": "1",
"_version": 4,
"result": "deleted",
"_shards": {
"total": 2,
"successful": 2,
"failed": 0
}
}