ElasticSearch-document文档数据-增删改

发布时间 2023-07-17 15:13:35作者: 蕝戀

文档就是相当于每条记录。

每个文档(数据记录行)都有几个元数据,分别是

  • _index,表示该文档是那个索引中的。
  • _type,表示文档的类型
  • _id,文档的唯一ID编号
  • _score,相关性分数。

添加文档(添加数据)

POST  /库名/类型名[/id]
注意:不给ID的化,则系统默认自己生成ID


例子:
POST http://127.0.0.1:9200/news/news/
{
    "article_id": 456,
    "user_id": 10,
    "title": "python如何获取时间戳!"
}

获取文档数据等信息

GET /库名/类型名/id

例子:

GET http://127.0.0.1:9200/news/news/111

**查询结果:**
{
    "_index": "news",
    "_type": "news",
    "_id": "111",
    "_version": 1,
    "_seq_no": 1,
    "_primary_term": 1,
    "found": true,
    "_source": {
        "article_id": 12,
        "user_id": 1,
        "title": "scrapy爬虫框架入门"
    }
}

判断文档是否存在

1、除了直接使用查询外(GET请求),还是可以发送HEAD请求也可以判断文档是否存在。

HEAD 索引库名/类型名/文档ID

查询时只显示某个字段的数据

https://www.elastic.co/guide/en/elasticsearch/reference/6.8/docs-get.html#get-source-filtering

一般过滤

GET /库名/类型名/id?_source=字段名,字段名,....

例:只获取user_id和title字段的数据


GET http://127.0.0.1:9200/news/news/111?_source=user_id,title

查询结果:
{
    "_index": "news",
    "_type": "news",
    "_id": "111",
    "_version": 1,
    "_seq_no": 1,
    "_primary_term": 1,
    "found": true,
    "_source": {
        "user_id": 1,
        "title": "scrapy爬虫框架入门"
    }
}

更详细的过滤

GET /库名/类型名/id?_source_includes=字段名&_source_excludes=字段名

_source_includes
_source_excludes
**这两个参数都采用逗号分隔的字段列表或通配符表达式。**

例如:

GET twitter/_doc/0?_source_includes=*.id&_source_excludes=entities


获取文档中的数据,其他信息不要

https://www.elastic.co/guide/en/elasticsearch/reference/6.8/docs-get.html#_source

按照之前的查询URL,我们一般会返回信息如下:

{
    "_index": "news",
    "_type": "news",
    "_id": "111",
    "_version": 1,
    "_seq_no": 1,
    "_primary_term": 1,
    "found": true,
    "_source": {
        "user_id": 1,
        "title": "scrapy爬虫框架入门"
    }
}

我们可以看到除了文档数据,还有很多其他的字段信息,如果你向要只拿文档信息可以用这个查询URL

GET /库名/类型名/id/_source

并且,同样支持过滤查询:
如:
GET /库名/类型名/id/_source?_source_include=xxx&_source_exclude=xxxx

修改文档的某个值

https://www.elastic.co/guide/en/elasticsearch/reference/6.8/docs-update.html#_updates_with_a_partial_document

POST <索引名>/<类型名>/<文档ID>/_update
{
    "doc" : {
        "字段名" : "新的值"
    }
}

例子:

POST http://127.0.0.1:9200/news/news/111/_update
{
    "doc": { //doc表示以文档形式进行部分更新。es还支持用script脚本形式更新值,具体可以参考官方文档。一般不怎么用...
        "title": "开玩笑呀....."
    }
}


修改结果返回:
{
    "_index": "news",
    "_type": "news",
    "_id": "111",
    "_version": 2,  // version每修改一次就会累加1
    **"result": "updated",**
    "_shards": {
        "total": 2, //表示应该在多少个分片副本(主分片和副本分片)上执行了索引操作
        **"successful": 1,**
        "failed": 0
    },
    "_seq_no": 2, // 每修改一次就会累加1
    "_primary_term": 1
}

还有一种方式,但是这种方式等同于重定义整个文档:

用下面这种方式修改文档数据,如果文档中其他字段不需要修改,你也要传递值,否则都会被清空!

PUT /库名/类型名/id
{
  "字段名": "值"
}

删除文档数据

DELETE /<索引库名>/<类型名>/<文档ID>

如:

DELETE http://127.0.0.1:9200/news/news/111


返回结果:
{
    "_index": "news",
    "_type": "news",
    "_id": "111",
    "_version": 4,
    **"result": "deleted",**
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "_seq_no": 4,
    "_primary_term": 1
}

根据查询语句来删除数据

参考:

他用的就是查询的语法

https://www.elastic.co/guide/en/elasticsearch/reference/6.8/docs-delete-by-query.html