热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ElasticSearch6.x学习笔记:7.文档

7.1新建文档indextypeid(1)一般格式PUTblogcsdn1{id:1,title:Elasticsearch简介,author

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
}
}

推荐阅读
author-avatar
海家罗
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有