索引部分
索引创建
创建索引库,设置分词器
PUT /students
{
"mappings": {
"properties": {
"name": {
"type": "text"
},
"address": {
"type": "keyword"
}
}
},
"settings": {
"index": {
"analysis.analyzer.default.type": "ik_max_word"
}
}
}#PUT请求具有幂等性,如果重复执行同样的语句创建索引库会报错
索引修改
PUT /students/_mapping
{
"properties": {
"address":{
"type": "keyword"
}
}
}
索引查询
查看所有索引
GET /_cat/indices?v
查看单个索引
GET /students
索引删除
删除索引库
DELETE /students
文档部分
创建文档
创建文档【格式:POST /索引名称/类型(7.6.1版本默认是_doc)/id】
POST /zh_user/_doc/1
{
"name": "xueya",
"address":"北京"
}#创建文档要用POST,如果没有指定id的话,es会自动生成,指定了就用我们指定的id
查询文档
根据主键查询文档(数据)
GET /students/_doc/1
全量查询索引下文档(数据)
GET /students/_search
修改文档
全量修改文档【格式:PUT /索引名称/类型(7.6.1版本默认是_doc)/id】
PUT /students/_doc/1
{
"name": "haha",
"address":"天津"
}
局部修改文档【格式:PUT /索引名称/类型(7.6.1版本默认是_doc)/id】
POST /students/_update/1
{
"doc":{
"name": "aaa",
"address":"天津"
}
}
删除文档
删除索引库内的文档(数据)
DELETE /students/_doc/1
重点的查询操作
条件查询
#条件查询
GET /students/_search
{
"query":{
"match":{
"name":"xueya"
}
}
}
#多字段查询
GET /students/_search
{
"query":{
"multi_match":{
"query":"xueya",
"fields":["name","address"]
}
}
}
#精确查询
GET /students/_search
{
"query": {
"term": {
"name": {
"value": "xueya"
}
}
}
}
分页查询
分页查询
GET /students/_search
{
"query":{
"match":{
"name":"xueya"
}
},
"from":0,
"size":2
}
排序查询
排序查询
GET /students/_search
{
"query":{
"match_all":{} #表示查询全部数据
},
"sort":{
"age":{
"order":"desc"
}
}
}
多条件查询
GET /students/_search
{
"query":{
"bool":{ #表示需要进行条件过滤
"must":[{ #表示必须满足下面的条件,并且参与计算分值,常用的子句还有should,表示“或”的意思
"match":{
"address":"天津"
}
},{
"match":{
"name":"xueya"
}
}]
}
}
}
范围查询
GET /students/_search
{
"query": {
"bool": { #表示需要进行条件过滤
"filter": [{ #返回的文档必须满足filter子句的条件。但是跟Must不一样的是,不会计算分值,并且可以使用缓存。【不算分的场景使用这个效率会提升】
"range": {
"age": {
"gt": 1 #查询age大于1
}
}
}]
}
}
}
查询分词结果
#两种方式
GET /students/_doc/1/_termvectors?fields=address
POST _analyze
{
"text": "测试分词效果",
"analyzer": "ik_max_word"
}
完全匹配
#match_phrase:分词后搜索。与match不同的是,match_phase分出来的词必须全部在搜索结果中,且位置顺序是一样的。
GET /students/_search
{
"query":{
"match_phrase":{
"name" : "你叫名"
}
}
}
高亮查询
GET /students/_search
{
"query": {
"match_phrase": {
"name": "xueya"
}
},
"highlight": {
"fields": {#表示对当前字段进行高亮处理
"name": {
"require-field-match":"false"#不进行字段匹配
}
}
}
聚合/分组查询
GET /students/_search
{
"aggs":{ #表示聚合操作
"age_group":{ #分组名称,可以随便起
"terms":{ #表示分组操作,也可以使用avg来求平均值
"field":"age" #表示对哪一个字段进行分组
}
}
}, "size":0 #表示不查询原始数据,只查询分组结果
}