Elasticsearch 入门案例
菜单目录
- 简介
- 索引操作
- 创建索引
- 查看索引
- 删除索引
- 文档操作
- 插入数据
- 更新文档
- 删除文档
- 查询操作
- 测试查询的数据
- 常规查询
- id单条查询
- Id批量查询ids
- 精确查询 term、terms
- 分词查询match、match_all、multi_match
- 过滤器filter查询
- 范围查询range
- 其他查询
- 前缀查询prefix
- 占位符查询wildcard
- 模糊查询fuzzy
- 多逻辑组合查询
- 根据查询条件删除
- 高亮查询highlight
- 相关扩展
- 查询分页
- 过滤响应属性
简介
以下内容基于Elasticsearch 6.5.4 环境
Elasticsearch 6.5.4 搭建教程
索引操作
创建索引
PUT /school
{"settings": {"number_of_replicas": 1,"number_of_shards": 1},"mappings": {"beijing": {"properties": {"name": {"type": "keyword"},"describe": {"type": "text","analyzer":"ik_max_word"},"location": {"type": "text","analyzer":"ik_max_word"},"tuition": {"type": "double"},"createDate": {"type": "date","format": "yyyy-MM-dd"}}}}
}
查看索引
GET /school
删除索引
DELETE /school
文档操作
插入数据
##ES自动生成ID
POST /school/beijing
{"name":"北京交通大学","describe":"北京交通大学是教育部直属,教育部、交通运输部、北京市人民政府和中国国家铁路集团有限公司共建的全国重点大学,“211工程”“985工程优势学科创新平台”项目建设高校和具有研究生院的全国首批博士、硕士学位授予高校。学校牵头的“2011计划”“轨道交通安全协同创新中心”是国家首批14个认定的协同创新中心之一。2017年,学校正式进入国家“双一流”建设行列,将围绕优势特色学科,重点建设“智慧交通”世界一流学科领域。","location":"北京市海淀区上园村3号","tuition":85000,"createDate":"2020-12-07"
}##自己指定ID
POST /school/beijing/2
{"name":"清华大学","describe":"清华大学是中国著名的高等学府,坐落于北京西北部风景秀丽的清华园。学校始建于1911 年。一个世纪以来,清华大学的发展始终与国家和民族的命运兴衰与共。“自强不息、厚德载物”的校训,“行胜于言”的校风,“严谨、勤奋、求实、创新”的学风,以“爱国奉献、追求卓越”为核心的清华精神,以及“中西融会、古今贯通、文理渗透”的办学特色,对学校的发展产生了深远的影响。。","location":"北京市海淀区清华园","tuition":10000,"createDate":"2020-12-06"
}
更新文档
##文档覆盖更新 PUT /school/beijing/{id}
PUT /school/beijing/cokhQHYBAWLkSrL7zmmv
{"name": "北京交通大学","describe": "北京交通大学是教育部直属,教育部、交通运输部、北京市人民政府和中国国家铁路集团有限公司共建的全国重点大学,“211工程”“985工程优势学科创新平台”项目建设高校和具有研究生院的全国首批博士、硕士学位授予高校。学校牵头的“2011计划”“轨道交通安全协同创新中心”是国家首批14个认定的协同创新中心之一。2017年,学校正式进入国家“双一流”建设行列,将围绕优势特色学科,重点建设“智慧交通”世界一流学科领域。","location": "北京市海淀区上园村3号","tuition": 8500,"createDate": "2020-12-07"
}##文档指定属性更新 /school/beijing/{id}/_update
POST /school/beijing/cokhQHYBAWLkSrL7zmmv/_update
{"doc": {"tuition" : 7500}
}
删除文档
## DELETE /school/beijing/{id}
DELETE /school/beijing/101
查询操作
测试查询的数据
## 创建索引
PUT /school
{"settings": {"number_of_replicas": 1,"number_of_shards": 1},"mappings": {"beijing": {"properties": {"name": {"type": "keyword"},"describe": {"type": "text","analyzer":"ik_max_word"},"location": {"type": "text","analyzer":"ik_max_word"},"tuition": {"type": "double"},"createDate": {"type": "date","format": "yyyy-MM-dd"}}}}
} ## 添加测试数据
POST /school/beijing
{"name":"北京交通大学","describe":"北京交通大学是教育部直属,教育部、交通运输部、北京市人民政府和中国国家铁路集团有限公司共建的全国重点大学,“211工程”“985工程优势学科创新平台”项目建设高校和具有研究生院的全国首批博士、硕士学位授予高校。学校牵头的“2011计划”“轨道交通安全协同创新中心”是国家首批14个认定的协同创新中心之一。2017年,学校正式进入国家“双一流”建设行列,将围绕优势特色学科,重点建设“智慧交通”世界一流学科领域。","location":"北京市海淀区上园村3号","tuition":85000,"createDate":"2020-12-07"
}POST /school/beijing/2
{"name":"清华大学","describe":"清华大学是中国著名的高等学府,坐落于北京西北部风景秀丽的清华园。学校始建于1911 年。一个世纪以来,清华大学的发展始终与国家和民族的命运兴衰与共。“自强不息、厚德载物”的校训,“行胜于言”的校风,“严谨、勤奋、求实、创新”的学风,以“爱国奉献、追求卓越”为核心的清华精神,以及“中西融会、古今贯通、文理渗透”的办学特色,对学校的发展产生了深远的影响。。","location":"北京市海淀区清华园","tuition":10000,"createDate":"2020-12-06"
}POST /school/beijing/5
{"name":"北京工业大学","describe":"北京工业大学(Beijing University Of Technology)创建于1960年,是一所以工为主,工、理、经、管、文、法、艺术、教育相结合的多科性市属重点大学。1981年成为国家教育部批准的第一批硕士学位授予单位,1985年成为博士学位授予单位,1996年通过国家“211工程”预审,正式跨入国家二十一世纪重点建设的百所大学的行列。2017年9月,学校正式进入国家一流学科建设高校行列,8个学科跻身2020年QS世界大学排行榜前500,位列QS2020年世界大学排名中国内地第32,化学、材料科学、工程、环境与生态、计算机科学5个学科进入ESI前1%。","location":"中国北京市朝阳区平乐园100号","tuition":75000,"createDate":"2020-12-07"
}POST /school/beijing/6
{"name":"北京航空航天大学","describe":"北京航空航天大学(简称北航)成立于1952年,由当时的清华大学、北洋大学、厦门大学、四川大学等八所院校的航空系合并组建,是新中国第一所航空航天高等学府,现隶属于工业和信息化部。学校分为学院路校区和沙河校区,占地3000亩,总建筑面积150余万平方米。自建校以来,北航一直是国家重点建设的高校,是全国第一批16所重点高校之一,也是80年代恢复学位制度后全国第一批设立研究生院的22所高校之一,首批进入“211工程”,2001年进入“985工程”。经过六十年的建设与发展,学校基本形成了研究型大学的核心竞争力,内在凝聚力和国内外影响力得到显著提升,跻身国内高水平大学的第一方阵","location":"北京市海淀区学院路37号","tuition":10000,"createDate":"2020-12-05"
}POST /school/beijing/6
{"name":"北京理工大学","describe":"北京理工大学1940年诞生于延安,是中国共产党创办的第一所理工科大学,是新中国成立以来国家历批次重点建设的高校,首批进入国家“211工程”和“985工程”,首批进入“世界一流大学”建设高校A类行列。毛泽东同志亲自题写校名,李富春、徐特立、李强等老一辈无产阶级革命家先后担任学校主要领导。学校现隶属于工业和信息化部,全体师生员工正对标国家“两个一百年”奋斗目标,全力朝着中国特色世界一流大学的建设目标迈进。","location":"北京海淀区中关村南大街5号","tuition":6000,"createDate":"2020-12-05"
}POST /school/beijing/101
{"name":"测试数据","describe":"这是一条测试的数据,专门用来测试用的","createDate":"2020-12-08"}
常规查询
id单条查询
GET /school/beijing/{id}
Id批量查询ids
POST /school/beijing/_search
{"query": {"ids": {"values": ["5","6"]}}
}
精确查询 term、terms
精确查询,不会对字符进行分词操作,在进行查询
term 属性只能一个值 类似 SQL 中 field = value
terms 对term的扩张 类似 SQl 中 field in (value1,value2)
###使用term进行查询
POST /school/beijing/_search
{"query": {"term": {"describe": {"value": "北京"}}}
}###使用term进行查询
POST /school/beijing/_search
{"query": {"terms": {"describe": ["北京"]}},"sort": [{"tuition": {"order": "asc"},"createDate": {"order": "desc"}}],"_source": ["tuition","createDate"]
}
分词查询match、match_all、multi_match
match: 查询知道分词器的存在,会对field进行分词操作,然后再查询。而term不会分词,会把field当成一个整体查询。analyzer: 指定分词器 ik_smart(最粗粒度的拆分)、ik_max_word(最细粒度的拆分)operator:表示单个字段如何匹配查询条件的分词 取值 or 和 and,默认值是orminimum_should_match: 分词最少匹配个数 默认值是1
match_all: 查询所有数据
multi_match: 在多个字段上执行匹配相同的查询type: 共有五种多字段匹配查询:best_fields,most_fields,cross_fields,phrase和phrase_prefix,默认的是best_fields类型
## 进行分词查询
POST /school/beijing/_search
{"from": 0, "size": 2, "query": {"match": {"describe": {"query": "北京交通","analyzer": "ik_max_word","operator": "or","minimum_should_match": 2}}}
}
## 查询所有数据
POST /school/beijing/_search
{"from": 0, "size": 2, "query": {"match_all": {}}
}
##多字段匹配查询
POST /school/beijing/_search
{"query": {"multi_match": {"query": "理工大学","fields": ["describe","name"],"analyzer": "ik_smart","type": "best_fields"}}
}
过滤器filter查询
query 查询上下文 这种语句在执行时既要计算文档是否匹配,还要计算文档相对于其他文档的匹配度有多高,匹配度越高,_score 分数就越高
filter 过滤上下文 过滤上下文中的语句在执行时只关心文档是否和查询匹配,不会计算匹配度,也就是得分。
POST /school/beijing/_search
{"query": {"bool": {"filter": {"match": {"describe": {"query": "北京交通大学","analyzer": "ik_smart"}}}}}
}
范围查询range
对于需要用到范围的查询,可以使用range,range和term作用的位置相同,比如查找id从1到10的文章,其中gt: > 大于(greater than)lt: < 小于(less than)gte: >= 大于或等于(greater than or equal to)lte: <= 小于或等于(less than or equal to)
POST /school/beijing/_search
{"query": {"range": {"createDate": {"gte": "2020-12-05","lte": "2020-12-06"}}},"sort": [{"createDate": {"order": "asc"}}]
}
其他查询
前缀查询prefix
前缀查询,可以通过一个关键字去指定一个field 的前缀,从而查询到指定文档
POST /school/beijing/_search
{"query": {"prefix": {"name": {"value": "北京理工"}}}
}
占位符查询wildcard
通配查询,同mysql中的like 是一样的,可以在查询时,在字符串中指定通配符*和占位符?
POST /school/beijing/_search
{"query": {"wildcard": {"describe": {"value": "北京??"}}}
}POST /school/beijing/_search
{"query": {"wildcard": {"describe": {"value": "北京*"}}}
}
模糊查询fuzzy
fuzzy 模糊查询会 出现错别字的ES会自动进行更正处理,不是特别稳定 prefix_length: 指定前面几个字符必须正确
##使用错别字进行查询 北京交通大学
POST /school/beijing/_search
{"query": { "fuzzy": {"name": {"value": "北京交大通学", "prefix_length": 3}}}
}
多逻辑组合查询
当需要多个逻辑组合查询的时候,可以使用bool来组各逻辑。bool可以包含
must:搜索的结果必须匹配,类似SQL的AND
must_not: 搜索的结果必须不匹配,类似SQL的NOT
should: 搜索的结果至少匹配到一个,类似SQL的OR{"bool" : {"must" : [],"should" : [],"must_not" : [],}
}
### describe like '%大学%' and createDate = '2020-12-07' and name != '北京工业大学'
#term 精确查询
POST /school/beijing/_search
{"query": {"bool": {"must": [{"term": {"describe": {"value": "大学"}} },{"term": {"createDate": {"value": "2020-12-07"}} }],"must_not":[{"term": {"name": {"value": "北京工业大学"}} }]}}
}#match 分词后查询
POST /school/beijing/_search
{"query": {"bool": {"must": [{"match": {"describe": {"query": "北京大学","analyzer": "ik_max_word"}}},{"term": {"createDate": {"value": "2020-12-07"}} }],"must_not":[{"term": {"name": {"value": "北京工业大学"}} }]}}
}
根据查询条件删除
_delete_by_query 根据查询的条件对文档进行删除
POST /school/beijing/_delete_by_query
{"query": {"term": {"name": {"value": "测试数据"}}}
}
高亮查询highlight
对查询关键字进行前后包装,可以在html进行高亮显示
ES提供了一个highlight 属性,他和query 同级别。frament_size: 指定高亮数据展示多少个字符回来pre_tags:指定前缀标签<front color="red">post_tags:指定后缀标签 </font>
## 请求报文
POST /school/beijing/_search
{"query": {"match": {"describe": {"query": "北京交通大学","analyzer": "ik_smart"}}},"highlight": {"fields": {"describe": {}},"pre_tags": "<p>","post_tags": "</p>","fragment_size": 10}
}## 响应结果
{"took" : 2,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0,"failed" : 0},"hits" : {"total" : 1,"max_score" : 1.2559291,"hits" : [{"_index" : "school","_type" : "beijing","_id" : "cokhQHYBAWLkSrL7zmmv","_score" : 1.2559291,"_source" : {"name" : "北京交通大学","describe" : "北京交通大学是教育部直属,教育部、交通运输部、北京市人民政府和中国国家铁路集团有限公司共建的全国重点大学,“211工程”“985工程优势学科创新平台”项目建设高校和具有研究生院的全国首批博士、硕士学位授予高校。学校牵头的“2011计划”“轨道交通安全协同创新中心”是国家首批14个认定的协同创新中心之一。2017年,学校正式进入国家“双一流”建设行列,将围绕优势特色学科,重点建设“智慧交通”世界一流学科领域。","location" : "北京市海淀区上园村3号","tuition" : 8500,"createDate" : "2020-12-07"},## 这里是高亮处理后的响应"highlight" : {"describe" : ["<p>北京交通大学</p>是教育部直属"]}}]}
}
相关扩展
查询分页
from - 表示起始位置,size - 表示每页数量;类似与 MySQL 的 limit + offset
POST /school/beijing/_search
{"from": 0,"size": 1,"query": {"match_all": {}}
}
过滤响应属性
过滤响应字段 _source 配置需要响应的属性
POST /school/beijing/_search
{"query": {"bool": {"filter": {"match": {"describe": {"query": "北京大学","analyzer": "ik_max_word"}}}}},"_source": "describe"
}
Elasticsearch 入门案例相关推荐
- Spring Data ElasticSearch入门案例
Spring Data ElasticSearch入门案例 创建maven工程elasticsearch_springdata 基于maven导入坐标 导入spring data elasticsea ...
- SpringData ElasticSearch入门案例
导入需要的依赖坐标 <dependencies><dependency><groupId>org.elasticsearch</groupId>< ...
- python elasticsearch 入门教程(二) ---全文搜索
python elasticsearch 入门教程(二) ---全文搜索 截止目前的搜索相对都很简单:单个姓名,通过年龄过滤.现在尝试下稍微高级点儿的全文搜索--一项 传统数据库确实很难搞定的任务. ...
- Elasticsearch入门到精通教程 - 学习资料综合
背景 因经常被问到Elasticsearch相关一些资料教程,这里特例整理一份以前自己的学习资料,希望对你有用. 信息资料 1. 基本API用法教程 Elasticsearch JAVA API教程G ...
- 全文检索-ElasticSearch入门
文章目录 1. 基于Lucene的全文检索 1.1 全文检索概念 1.2 全文检索过程 1.3 全文检索相关概念 1.4 全文检索的使用场景 2. ElasticSearch 2.1 ElasticS ...
- ElasticSearch入门总结
1.ElasticSearch下载和安装 ElasticSearch是使用java开发的,且本版本的es需要的jdk版本要是1.8以上,所以安装ElasticSearch 之前保证JDK1.8+安装完 ...
- ES(Elasticsearch)入门学习教程
Elasticsearch 入门学习教程 1.1 为什么要学Elasticsearch? 1.2 如何下载安装使用ES? 1.2.1 ES 安装使用条件 1.2.2 ES 下载须知 1.2.3 ES ...
- 大白话ElasticSearch入门概念,看不懂找我!
点击上方蓝色"胖滚猪学编程",选择"设为星标" 跟着胖滚猪学编程!好玩!有趣! 这是胖滚猪ES系列博文第三篇,大白话ElasticSearch入门概念. 阅读本 ...
- 2021年大数据Flink(八):Flink入门案例
目录 Flink入门案例 前置说明 API 编程模型 准备工程 pom文件 log4j.properties Flink初体验 需求 编码步骤 代码实现 Flink入门案例 前置说明 API API ...
最新文章
- 信息安全“拷问”智慧城市建设 如何解决
- 全国计算机在线做题,2020全国一级计算机基础及MS Office应用考试在线自测试题库(不限设备,登陆即可做题)...
- mysql数据库分表备份脚本_MySQL分库分表备份脚本
- 基于Ruby的watir-webdriver自动化测试方案与实施(四)
- 从零开始学习docker(四)host
- Mysql 可重复读
- 【leetcode】二进制手表-经典或回溯题目
- PPAPI nacl_sdk安装
- [lua]紫猫lua教程-命令宝典-L1-01-07. table表
- 天啦,这才是英国退欧的真相!
- Excel 数据透视表教程大全之 03 刷新数据、添加多个字段作为值字段、值显示为总数的百分
- 神奇的分形艺术(一):无限长的曲线可能围住一块有限的面积
- GEE系列:第 1 单元 Google 地球引擎简介
- 我的理想200字计算机工程师,我的理想作文200字
- c语言中TR1=1什么意思,c – 如何在Visual Studio 2010(tr1 :: function)中使用tr1?
- 校园网常见故障及解决方案
- The Annotated Diffusion Model(翻译)
- 使用新媒体管家采集公众号文案
- 中式风格,自然淡雅,彰显极致生活格调!
- 复杂问题简单化以及简单问题复杂化
热门文章
- 国家2级计算机考试准考证号
- 逆向学习实战之--替换哈罗单车图片
- python写音乐_你想过用代码来写音乐吗?我用业余时间开发的一个可以编程写音乐的python库(一)...
- 卷积神经网络实现手写数字集
- PTA1018 锤子剪刀布
- 贪婪洞窟2一直显示连接服务器失败,贪婪洞窟2登陆不了怎么办?游戏无法登陆解决方法...
- c++逆天改命进阶--二叉树练习题
- 江苏“同心圆”工程为银发投资安全设“保护圈”
- 大数据毕设选题 - 机器学习餐厅销量预测(大数据 python)
- java word转二进制_DWORD WORD到INT的转换