菜单目录
简介
以下内容基于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,默认值是or
minimum_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"
}