Elasticsearch 入门案例


简介

以下内容基于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"
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值