ES创建索引库创建映射⽂档操作(添加⽂档、搜索⽂档、更新⽂档、删除⽂档)
使⽤IK分词器映射。。。
以下ES、ES_head都部署在linux系统中
⼀、创建索引库
ES的索引库是⼀个逻辑概念,它包括了分词列表及⽂档列表,同⼀个索引库中存储了相同类型的⽂档。它就相当于MySQL中的表,或相当于Mongodb中的集合。
关于索引这个语:
索引(名词):ES是基于Lucene构建的⼀个搜索服务,它要从索引库搜索符合条件索引数据。
索引(动词):索引库刚创建起来是空的,将数据添加到索引库的过程称为索引。
下边介绍两种创建索引库的⽅法,它们的⼯作原理是相同的,都是客户端向ES服务发送命令。
第⼀种:使⽤postman或curl这样的⼯具创建:
put 服务器ip:9200/索引库名称 #注意不能使⽤post
{
"settings":{
"index":{
"number_of_shards":1,
"number_of_replicas":0
}
}
}
下⾯使⽤postman创建的例⼦
第⼆种:使⽤es_head创建
⼆、创建映射
1.概念说明:
在索引中每个⽂档都包括了⼀个或多个field(⼀⾏记录中包含⼀个或多个字段),创建映射就是向索引库中创建field的过程,下边是document和field与关系数据库的概念的类⽐:
⽂档(Document)----------------Row ⾏记录(数据库记录)
字段(Field)-------------------Columns 列
上边讲的创建索引库相当于关系数据库中的数据库还是表?
1、如果相当于数据库就表⽰⼀个索引库可以创建很多不同类型的⽂档,这在ES中也是允许的。
2、如果相当于表就表⽰⼀个索引库只能存储相同类型的⽂档,ES官⽅建议在⼀个索引库中只存储相同类型的⽂档。
2.创建映射
创建映射语法
post 服务器ip:9200/索引库名称/类型名称/_mapping
由于ES6.0版本还没有将type(类型名称)彻底删除,所以暂时把type起⼀个没有特殊意义的名字。ES9.0版本把type彻底删除
使⽤postman创建的例⼦
post 服务器ip:9200/es_wcc/doc/_mapping #在es_wcc索引库下的doc类型下创建映射mysql操作官方文档
映射内容创建映射,三个字段:name/description/studymodel
{
"properties": {
"name": {
"type": "text"
},
"description": {
"type": "text"
},
"studymodel": {
"type": "keyword"
}
}
}
映射创建成功,查看es_head页⾯
三、⽂档操作
添加⽂档
ES中⽂档相当于MySQL数据库表中的记录。
添加⽂档语法
put 或Post 服务器ip:9200/es_wcc/doc/id值#如果不指定id值ES会⾃动⽣成id,id值可以随便设置,如果id值重复了,就是修改之前的数据,不是创建 ******
使⽤postman创建⽰例(这⾥没有设置id值,随机⽣成id值)
post 101.132.167.242:9200/es_wcc/doc
{
"name":"Bootstrap开发框架",
"description":"Bootstrap是由Twitter推出的⼀个前台页⾯开发框架,在⾏业之中使⽤较为⼴泛。此开发框架包含了⼤量的CSS、JS程序代码,可以帮助开发者(尤其是不擅长页⾯开发的程序⼈员)轻松的
实现⼀个不受浏览器限制的精美界⾯效果。"studymodel":"201001"
}
通过es_head查看数据
搜索⽂档
1.根据id查询数据
查询语句
get 101.132.167.242:9200/es_wcc/doc/r3kAcnUB3x_-S6cmA9o5使⽤postman测试
使⽤es_head查询数据
2.查询所有记录
get 101.132.167.242:9200/es_wcc/doc/_search
注意:使⽤postman查询出现以下错误
{
"error": {
"root_cause": [
{
"type": "parsing_exception",
"reason": "Unknown key for a VALUE_STRING in [name].",
"col": 10
}
],
"type": "parsing_exception",
"reason": "Unknown key for a VALUE_STRING in [name].",
"line": 2,
"col": 10
},
"status": 400
}
原因:请求body中包含了数据,删掉重新请求,结果如下
{
"took": 3,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 1.0,
"hits": [
{
"_index": "es_wcc",
"_type": "doc",
"_id": "r3kAcnUB3x_-S6cmA9o5",
"_score": 1.0,
"_source": {
"name": "Bootstrap开发框架",
"description": "Bootstrap是由Twitter推出的⼀个前台页⾯开发框架,在⾏业之中使⽤较为⼴泛。此开
发框架包含了⼤量的CSS、JS程序代码,可以帮助开发者(尤其是不擅长页⾯开发的程序⼈员)轻松的实现⼀个不受浏览器限制的精美"studymodel": "201001"
}
},
{
"_index": "es_wcc",
"_type": "doc",
"_id": "sHkWcnUB3x_-S6cmcNr_",
"_score": 1.0,
"_source": {
"name": "flask后台开发",
"description": "flask后台开发+算法实现",
"studymodel": "2020111"
}
}
]
}
}
3.查询名称中包括bootstrap关键字的记录
get 101.132.167.242:9200/es_wcc/doc/_search?q=name:bootstrap
4.查询学习模式为201001的记录
get 101.132.167.242:9200/es_wcc/doc/_search?q=studymodel:201001
请求结果分析
{
"took": 70,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.6931472,
"hits": [
{
"_index": "es_wcc",
"_type": "doc",
"_id": "r3kAcnUB3x_-S6cmA9o5",
"_score": 0.6931472,
"_source": {
"name": "Bootstrap开发框架",
"description": "Bootstrap是由Twitter推出的⼀个前台页⾯开发框架,在⾏业之中使⽤较为⼴泛。此开发框架包含了⼤量的CSS、JS程序代码,可以帮助开发者(尤其是不擅长页⾯开发的程序⼈员)轻松的实现⼀个不受浏览器限制的精美"studymodel": "201001"
}
}
]
}
}
took:本次操作花费的时间,单位为毫秒。
timed_out:请求是否超时
_shards:说明本次操作共搜索了哪些分⽚
hits:搜索命中的记录
hits.max_score:⽂档匹配得分,这⾥为最⾼分
_score:每个⽂档都有⼀个匹配度得分,按照降序排列。
_source:显⽰了⽂档的原始内容。
请求结果分析
DSL搜索
DSL(Domain Specific Language)是ES提出的基于json的搜索⽅式,在搜索时传⼊特定的json格式的数据来完成不同的搜索需求。
DSL⽐URI搜索⽅式功能强⼤,在项⽬中建议使⽤DSL⽅式来完成搜索。
查询指定索引库指定类型下的⽂档。(使⽤DSL搜索⽅法)
post 服务器ip:9200/es_wcc/doc/_search
{
"query": {
},
"_source" : ["name","studymodel"]
}
分页查询
ES⽀持分页查询,传⼊两个参数:from和size
form:表⽰起始⽂档的下标,从0开始。
size:查询的⽂档数量。
post 服务器ip:9200/es_wcc/doc/_search
{
"from" : 0, "size" : 1,
"query": {
"match_all": {}
},
"_source" : ["name","studymodel"]
}
Term Query
Term Query为精确查询,在搜索时会整体匹配关键字,不再将关键字分词。
post 服务器ip:9200/es_wcc/doc/_search
{
"query": {
"term" : {
"name": "spring"
}
},
"_source" : ["name","studymodel"]
}
上边的搜索会查询name包括“spring”这个词的⽂档。
更新⽂档
通过url请求有两种⽅法:
1.完全替换
Post:服务器ip:9200/es_test/doc/3 #查到id=3数据修改
{
"name":"spring cloud实战",
"description":"本课程主要从四个章节进⾏讲解: 1.微服务架构⼊门 2.spring cloud 基础⼊门 3.实战Spring Boot 4.注册中⼼eureka。",
"studymodel":"201001"
"price":5.6
}
2.局部修改 (只更新某个字段)
post 服务器ip:9200/es_test/doc/3/_update
{
"doc":{"price":66.6} #更新price字段
}
删除⽂档
1.根据id删除,格式如下
delete 服务器ip:9200/es_wcc/doc/3
2.搜索匹配删除,将搜索出来的记录删除,格式如下:
post 服务器ip:9200/es_wcc/doc/_delete_by_query
{
"query":{
"term":{
"studymodel":"201001"
}
}
}
搜索匹配将studymodel为201001的记录全部删除
四、使⽤IK分词器
1.测试分词器
会进⾏分词,索引中存放的就是⼀个⼀个的词(term),当你去搜索时就是拿关键字去匹配词,最终到词关联的⽂档。
索引库默认使⽤的分词器对中⽂是单字分词
2.两种分词模式
ik分词器有两种分词模式:ik_max_word和ik_smart模式。
1、ik_max_word
会将⽂本做最细粒度的拆分,⽐如会将“中华⼈民共和国⼈民⼤会堂”拆分为“中华⼈民共和国、中华⼈民、中华、华⼈、⼈民共和国、⼈民、共和国、⼤会堂、⼤会、会堂等词语。
2、ik_smart
会做最粗粒度的拆分,⽐如会将“中华⼈民共和国⼈民⼤会堂”拆分为中华⼈民共和国、⼈民⼤会堂。
测试两种分词模式:
发送:post localhost:9200/_analyze
{"text":"中华⼈民共和国⼈民⼤会堂","analyzer":"ik_smart" }
3.⾃定义词库
如果要让分词器⽀持⼀些专有词语,可以⾃定义词库。
iK⽬录下⼀个main.dic的⽂件,此⽂件为词库⽂件。
五、映射
1.映射的维护⽅法
查询所有索引的映射
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论