【Elasticsearch系列】文档的基本操作

文档的基本操作

一、添加

添加文档数据

POST /my_doc/_doc/1 -> {索引名}/_doc/{索引ID}(是指索引在es中的id,而不是这条记录的id,比如记录的id从数据库来是1001,并不是这个。如果不写,则自动生成一个字符串。建议和数据id保持一致> )

{
    "id": 1001,
    "name": "imooc-1",
    "desc": "imooc is very good, 慕课网非常牛!",
    "create_date": "2019-12-24"
}

{
    "id": 1002,
    "name": "imooc-2",
    "desc": "imooc is fashion, 慕课网非常时尚!",
    "create_date": "2019-12-25"
}

{
    "id": 1003,
    "name": "imooc-3",
    "desc": "imooc is niubility, 慕课网很好很强大!",
    "create_date": "2019-12-26"
}

{
    "id": 1004,
    "name": "imooc-4",
    "desc": "imooc is good~!",
    "create_date": "2019-12-27"
}

{
    "id": 1005,
    "name": "imooc-5",
    "desc": "慕课网 is 强大!",
    "create_date": "2019-12-28"
}

{
    "id": 1006,
    "name": "imooc-6",
    "desc": "慕课是一个强大网站!",
    "create_date": "2019-12-29"
}

{
    "id": 1007,
    "name": "imooc-7",
    "desc": "慕课网是很牛网站!",
    "create_date": "2019-12-30"
}

{
    "id": 1008,
    "name": "imooc-8",
    "desc": "慕课网是很好看!",
    "create_date": "2019-12-31"
}

{
    "id": 1009,
    "name": "imooc-9",
    "desc": "在慕课网学习很久!",
    "create_date": "2020-01-01"
}
  • 注:如果索引没有手动建立mappings,那么当插入文档数据的时候,会根据文档类型自动设置属性类型。这个就是es的动态映射,帮我们在index索引库中去建立数据结构的相关配置信息。
  • “fields”: {“type”: “keyword”} 对一个字段设置多种索引模式,使用text类型做全文检索,也可使用keyword类型做聚合和排序
  • “ignore_above” : 256 设置字段索引和存储的长度最大值,超过则被忽略

批量添加

POST  /imooc-test/_doc/_bulk
{"index":{}}
{"id":1003,"name":"imooc-3","desc":"imoocisniubility,慕课网很好很强大!","create_date":"2019-12-26"}
{"index":{}}
{"id":1004,"name":"imooc-4","desc":"imoocisgood~!","create_date":"2019-12-27"}
{"index":{}}
{"id":1005,"name":"imooc-5","desc":"慕课网is强大!","create_date":"2019-12-28"}
{"index":{}}
{"id":1006,"name":"imooc-6","desc":"慕课是一个强大网站!","create_date":"2019-12-29"}
{"index":{}}
{"id":1007,"name":"imooc-7","desc":"慕课网是很牛网站!","create_date":"2019-12-30"}
{"index":{}}
{"id":1008,"name":"imooc-8","desc":"慕课网是很好看!","create_date":"2019-12-31"}
{"index":{}}
{"id":1009,"name":"imooc-9","desc":"在慕课网学习很久!","create_date":"2020-01-01"}

二、修改删除

删除文档

DELETE /my_doc/_doc/1
  • 注:文档删除不是立即删除,文档还是保存在磁盘上,索引增长越来越多,才会把那些曾经标识过删除的,进行清理,从磁盘上移出去。

修改文档

局部
POST /my_doc/_doc/1/_update
{
    "doc": {
        "name": "123"
    }
}
全量替换
PUT /my_doc/_doc/1
{
     "id": 1001,
    "name": "imooc-1",
    "desc": "imooc is very good, 慕课网非常牛!",
    "create_date": "2019-12-24"
}
  • 注:每次修改后version都会增加

三、查询

查询文档

查询
GET /index_demo/_doc/1
GET /index_demo/_doc/_search
查询结果
{
    "_index": "my_doc",
    "_type": "_doc",
    "_id": "2",
    "_score": 1.0,
    "_version": 9,
    "_source": {
        "id": 1002,
        "name": "imooc-2",
        "desc": "imooc is fashion",
        "create_date": "2019-12-25"
    }
}
元数据
  • _index:文档数据所属那个索引,理解为数据库的某张表即可。
  • _id:文档数据的唯一标识,类似数据库中某张表的主键。可以自动生成或者手动指定。
  • _score:查询相关度,是否契合用户匹配,分数越高用户的搜索体验越高。
  • _version:版本号。
  • _source:文档数据,json格式。
定制结果集
GET /index_demo/_doc/1?_source=id,name
GET /index_demo/_doc/_search?_source=id,name
判断文档是否存在
HEAD /index_demo/_doc/1

文档乐观锁控制 if_seq_no与if_primary_term

插入新数据

POST /my_doc/_doc
{
    "id": 1010,
    "name": "imooc-1010",
    "desc": "imoocimooc!",
    "create_date": "2019-12-24"
}
# 此时 _version 为 1

修改数据

POST    /my_doc/_doc/{_id}/_update
{
    "doc": {
        "name": "慕课"
    }
}
# 此时 _version 为 2

模拟两个客户端操作同一个文档数据,_version都携带为一样的数值

# 操作1
POST    /my_doc/_doc/{_id}/_update?if_seq_no={数值}&if_primary_term={数值}
{
    "doc": {
        "name": "慕课1"
    }
}

# 操作2
POST    /my_doc/_doc/{_id}/_update?if_seq_no={数值}&if_primary_term={数值}
{
    "doc": {
        "name": "慕课2"
    }
}
版本元数据
  • _seq_no:文档版本号,作用同_version(相当于学生编号,每个班级的班主任为学生分配编号,效率要比学校教务处分配来的更加高效,管理起来更方便)
  • _seq_no:文档版本号,作用同_version(相当于学生编号,每个班级的班主任为学生分配编号,效率要比学校教务处分配来的更加高效,管理起来更方便)

分词与内置分词器

什么是分词

把文本转换为一个个的单词,分词称之为analysis。es默认只对英文语句做分词,中文不支持,每个中文字都会被拆分为独立的个体。

  • 英文分词:I study in
  • 中文分词:我在慕课网学习
POST /_analyze
{
    "analyzer": "standard",
    "text": "text文本"
}
POST /my_doc/_analyze
{
    "analyzer": "standard",
    "field": "name",
    "text": "text文本"
}
es内置分词器
  • standard:默认分词,单词会被拆分,大小会转换为小写。
  • simple:按照非字母分词。大写转为小写。
  • whitespace:按照空格分词。忽略大小写。
  • stop:去除无意义单词,比如the/a/an/is
  • keyword:不做分词。把整个文本作为一个单独的关键词。

IK中文分词器

下载IK中文分词器
github:https://github.com/medcl/elasticsearch-analysis-ik/releases/

zip解压: unzip xxx.zip -d ik

POST /_analyze
{
    "analyzer": "ik_max_word",
    "text": "上下班车流量很大"
}
自定义词库

1、 在{es}/plugins/ik/config下,创建:

vim custom.dic

2、 并且添加内容:

呵呵
骚年

3、配置自定义扩展词典

<entry key="ext_dict">custom.dic</entry>

4、重启

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值