Elasticsearch索引库和文档的相关操作详细指南
作者:小威要向诸佬学习呀
前言:
最近一直在复习Elasticsearch相关的知识,公司搜索相关的技术用到了这个,用公司电脑配了环境,借鉴网上的课程进行了总结。希望能够加深自己的印象以及帮助到其他的小伙伴儿们😉😉。
mapping映射属性
前面说到,Mapping映射是索引中对文档的约束,类似于数据库表中对字段的约束。那么mapping都有哪些常见的属性呢:
type:type属性是用来定义字段数据类型结构的,常见的简单类型有:
- 字符串:text(可以分词的文本),keyword(精确值,不可分词)
- 数值:byte,short,integer,long,float,double
- 布尔型:boolean
- 日期型:date
- 对象型:object
index:用来说明是否创建索引,不设置时默认为true(创建索引)
analyzer:使用哪种分词器,ik_smart(最少切分,粗粒度),ik_max_word(最细切分,细粒度)
properties:字段中的子字
操作索引库
操作索引库和操作文档的命令略微简单一些,以下简单做个概述吧。
创建索引库
在我们学习ssm框架的时候,用到了restful请求风格,在es中,也是通过restful请求来操作索引库和文档的。请求的内容用DSL语句表示,创建索引库的DSL语句如下:
由上可以看到,当type类型为"text"时,才能设置分词器类型,当字段类型为“keyword”时,不会设置。在字段的内部可以有子字段的。
举个栗子,我们对下面栗子编写DSL语句:
{ “info”: “小威要向诸佬学习”, “email”: “xiaoweibest.cn” “name”:{ “firstname”: “小”, “lastname”: “威” } }
分析:info中的内容是需要分词的,email中的内容不需要,name中同时又有两个子属性:
PUT /xiaowei { "mappings":{ "properties":{ "info": { "type": "text", "analyzer": "ik_smart" }, "email": { "type": "keyword", "index": false }, "name": { "type": "object", "properties": { "firstname": { "type": "keyword" }, "lastname": { "type": "keyword" } } } } } }
运行即可创建索引库:
查询,删除索引库
查看索引库仅需要通过简单的Get命令,后面跟要查询的索引库名称即可,即Get 索引库名。以刚创建的索引库为例:
# 查看数据库 GET /xiaowei
想必很容易猜的出删除索引库的命令,佬想对了,删除索引库命令就是DELETE 索引库名称,即:
# 删除索引库 DELETE /xiaowei
修改索引库
在es中,索引库和mapping映射创建后无法对其进行修改,因为创建后,es会根据映射为其创建倒排索引,一旦修改索引库和mapping,倒排索引会失效,但是可以为索引库添加新的字段:
添加类型为long的年龄字段:
PUT /xiaowei/_mapping { "properties": { "age": { "type": "long" } } }
将年龄字段类型修改为integer并运行:
PUT /xiaowei/_mapping { "properties": { "age": { "type": "integer" } } }
运行后会发现会提示不能修改索引库:
操作文档
索引库中文档的操作DSL语法也比较简单,这里直接以例子的形式记录知识
增删查文档
添加文档的语法比较简单,和上面类似:
#新增文档 POST /xiaowei/_doc/1 { "info": "小威", "email": "xiaowei.cn", "name": { "firstname": "小", "lastname": "威" } }
由上图可以看到创建文档成功,并且会有版本号version,在每次改变文档时,版本号都会进行+1操作。
当然,查询和删除文档和上面的例子命令一样,查询文档GET/索引库名称/_doc,删除文档DELECT/索引库名称/_doc。
GET /xiaowei/_doc/1
DELECT /xiaowei/_doc/1
如上图,每次操作文档version的值都会进行+1。
修改文档
修改文档有两种方式,一种为PUT命令全量覆盖,一种为POST命令局部修改。
使用PUT命令操作文档时,如果只是PUT了一个字段,其他的字段就被覆盖了,相当于删除了之前旧的文档,重新创建了一个新文档。
而POST命令可以局部修改想要改变的值,即增量修改,修改指定字段的值。。
比如讲刚才添加文档的email值首字母大写,DSL代码如下:
POST /xiaowei/_update/1 { "doc": { "email": "XiaoWei.cn" } }
运行结果:
总结
到此这篇关于Elasticsearch索引库和文档的相关操作的文章就介绍到这了,更多相关Elasticsearch索引库和文档内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!