7.1 新建文档
代码语言:javascript复制index/type/id
(1)一般格式
代码语言:javascript复制PUT blog/csdn/1
{
"id":1,
"title":"Elasticsearch简介",
"author":"chengyuqiang",
"content":"Elasticsearch是一个基于Lucene的搜索引擎"
}
代码语言:javascript复制{
"_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 | 版本号 |
继续添加一条数据
代码语言:javascript复制POST blog/csdn/2
{
"id":2,
"title":"Git简介",
"author":"chengyuqiang",
"content":"Git是一个版本控制软件"
}
代码语言:javascript复制{
"_index": "blog",
"_type": "csdn",
"_id": "2",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 2,
"failed": 0
},
"created": true
}
(2)未指定文档ID
代码语言:javascript复制POST blog/csdn
{
"id":3,
"title":"Java编程",
"author":"chengyuqiang",
"content":"Java面向对象程序设计"
}
代码语言:javascript复制{
"_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 获取文档
代码语言:javascript复制GET blog/csdn/1
代码语言:javascript复制{
"_index": "blog",
"_type": "csdn",
"_id": "1",
"_version": 1,
"found": true,
"_source": {
"id": 1,
"title": "Elasticsearch简介",
"author": "chengyuqiang",
"content": "Elasticsearch是一个基于Lucene的搜索引擎"
}
}
代码语言:javascript复制GET blog/csdn/100
代码语言:javascript复制{
"_index": "blog",
"_type": "csdn",
"_id": "100",
"found": false
}
代码语言:javascript复制HEAD blog/csdn/1
代码语言:javascript复制200 - OK
代码语言:javascript复制HEAD blog/csdn/100
代码语言:javascript复制404 - Not Found
代码语言:javascript复制GET blog/csdn/_mget
{
"ids":["1","2"]
}
代码语言:javascript复制{
"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)检索全部文档
代码语言:javascript复制GET blog/_search
代码语言:javascript复制{
"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查询用于查找指定字段中包含指定分词的文件,只有当查询分词和文档中的分词精确匹配时才被检索到。
代码语言:javascript复制GET blog/_search
{
"query": {
"term": {
"title": "程"
}
}
}
由于未使用IK中文分词,每个汉字被看做独立的一个词。
代码语言:javascript复制{
"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字段中找不到这样的分词,默认汉字被分为单字词。
代码语言:javascript复制GET blog/_search
{
"query": {
"term": {
"title": "程序"
}
}
}
代码语言:javascript复制{
"took": 5,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 0,
"max_score": null,
"hits": []
}
}
(3)terms查询 查询文档汇总包含多个词的文档
代码语言:javascript复制GET blog/_search
{
"query": {
"terms": {
"title": ["java","git"]
}
}
}
注意,经过分词后英文单词变成了小写,比如”Java”词项变成了”java”
代码语言:javascript复制{
"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查询,只要被查询字段中存在任何一个词项被匹配,就会搜索到该文档。
代码语言:javascript复制GET blog/_search
{
"query": {
"match": {
"title": {
"query": "程序"
}
}
}
}
代码语言:javascript复制{
"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实际上重建新文档替换掉旧文档。
代码语言:javascript复制POST blog/csdn/2
{
"id":2,
"title":"Git简介",
"author":"hadron",
"content":"Git是一个分布式版本控制软件"
}
执行结果
代码语言:javascript复制{
"_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的文件已经被标记“删除”,并添加了一个完整的新文档。旧文档不会立即消失,但是不能再访问它。
查询
代码语言:javascript复制GET blog/csdn/2
代码语言:javascript复制{
"_index": "blog",
"_type": "csdn",
"_id": "2",
"_version": 2,
"found": true,
"_source": {
"id": 2,
"title": "Git简介",
"author": "hadron",
"content": "Git是一个分布式版本控制软件"
}
}
(2)更新字段
代码语言:javascript复制POST blog/csdn/2/_update
{
"script": {
"source": "ctx._source.content="Git是一个开源的分布式版本控制软件""
}
}
代码语言:javascript复制{
"_index": "blog",
"_type": "csdn",
"_id": "2",
"_version": 3,
"result": "updated",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 7,
"_primary_term": 1
}
查看更新后的文档
代码语言:javascript复制GET blog/csdn/2
代码语言:javascript复制{
"_index": "blog",
"_type": "csdn",
"_id": "2",
"_version": 3,
"found": true,
"_source": {
"id": 2,
"title": "Git简介",
"author": "hadron",
"content": "Git是一个开源的分布式版本控制软件"
}
}
(3)添加新字段
代码语言:javascript复制POST blog/csdn/1/_update
{
"script": "ctx._source.posttime="2018-01-09""
}
代码语言:javascript复制{
"_index": "blog",
"_type": "csdn",
"_id": "1",
"_version": 2,
"result": "updated",
"_shards": {
"total": 2,
"successful": 2,
"failed": 0
}
}
查询更新后的文档
代码语言:javascript复制GET blog/csdn/1
代码语言:javascript复制{
"_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)查询更新
代码语言:javascript复制POST blog/_update_by_query
{
"script": {
"source": "ctx._source.category=params.category",
"lang":"painless",
"params":{"category":"git"}
},
"query":{
"term": {"title":"git"}
}
}
代码语言:javascript复制{
"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 删除文档
代码语言:javascript复制DELETE blog/csdn/1
代码语言:javascript复制{
"found": true,
"_index": "blog",
"_type": "csdn",
"_id": "1",
"_version": 4,
"result": "deleted",
"_shards": {
"total": 2,
"successful": 2,
"failed": 0
}
}