天天看点

elasticsearch基本操作(ES7.x入门)

1.使用docker启动一个es

docker run -d --name elasticsearch  -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.17.2      

2.浏览器输入ip:9200访问

elasticsearch基本操作(ES7.x入门)

3.基本操作

url: ip:9200

3.1 创建索引

PUT  url/索引名

例:url/shopping      

3.2 查看索引信息

GET  url/索引名

例:url/shopping      

3.3 查看全部索引

GET  url/_cat/indices?v

例:url/_cat/indices?v      

3.4 删除索引

DELETE url/索引名

例:url/shopping      

3.5 创建文档

POST /索引名/_doc

或
POST /索引名/_create

参数以json格式放body里      

例:

elasticsearch基本操作(ES7.x入门)

 指定id,当指定了id的时候,如果数据不存在,则更新,如果不存在,则创建。

另外,也可以不用_doc,使用_create

POST /索引名/_doc/id

或
POST /索引名/_create/id

参数以json格式放body里      
elasticsearch基本操作(ES7.x入门)

 3.6 查询文档

3.6.1 根据id查询

GET 索引名/_doc/文档id

例: shopping/_doc/1055      

3.6.2 查询全部

GET 索引名/_search

例:shopping/_search      
elasticsearch基本操作(ES7.x入门)

3.6.3 查询全部

将参数放在请求体里

{
    "query":{
        "match_all":{
        }
    }
}      
elasticsearch基本操作(ES7.x入门)

3.7 更新文档

3.7.1 全量更新(相当于先删除,后创建,只是id没变)

POST/PUT 索引名/_doc/id
参数放请求体 {}      

3.7.2 部分更新:

POST 索引名/_update/id

参数:
{
    "doc": {参数}
}

例:
/shopping/_update/1056

参数:
{
    "doc":{
       "title":"华为手机"
    }
}      

3.8 删除文档

DELETE 索引名/_doc/id

例: shopping/_doc/1056      

3.9 条件查询

3.9.1 普通条件查询

GET 索引名/_search?q=key:value

例:shopping/_search?q=title:华为      

3.9.2  高级条件查询

将查询参数放在请求体里

elasticsearch基本操作(ES7.x入门)

 3.10 分页查询

GET 索引名/_search

参数:
{
    "query":{
        "match_all":{
        }
    },
    "from": 2,
    "size": 2
}

from:表示第几条记录
size:表示每页多少记录

from=(页码-1)*size      

3.11 指定要查询的字段

GET /索引名/_search

{
    "query":{
        "match_all":{
        }
    },
    "from": 2,
    "size": 2,
    "_source": ["title"]
}

通过 _source 指定只查询 title 字段      

3.12 对查询结果进行排序

注意:如果排序时使用了分页查询,则是先排序,后分页。

GET /索引名/_search

{
    "query":{
        "match_all":{
        }
    },
    "from": 2,
    "size": 2,
    "_source": ["title","price"],
    "sort":{
        "price":{
            "order":"asc"
        }
    }
}

sort表示要对查询结果进行排序
price表示要排序的字段
order指定排序方式,升序还是降序      

3.13 多条件查询

GET 索引名/_search

例: 查询category为华为的所有文档 must理解为:并且、同时成立
GET shopping/_search
{
    "query":{
        "bool":{
            "must":[
              {
                "match":{
                    "category":"华为"
                }
              }
            ]
        }
    }    
}

例:查询category为华为并且price为3888的文档
GET shopping/_search
{
    "query":{
        "bool":{
            "must":[
              {
                "match":{
                    "category":"华为"
                }
              },
              {
                "match":{
                    "price":"3888"
                }
              }              
            ]
        }
    }
}


例:查询category为华为或OPPO的文档,并按price排序 should可以理解为:或
GET shopping/_search
{
    "query":{
        "bool":{
            "should":[
              {
                "match":{
                    "category":"华为"
                }
              },
              {
                "match":{
                    "category":"OPPO"
                }
              }
            ]
        }
    },
    "sort":{
        "price":{
            "order":"asc"
        }
    }  
}


例:查询 查询category为华为或小米或OPPO的手机,并且价格大于5000,此处使用filter,gt表示大于,lt表示小于。
GET shopping/_search
{
    "query":{
        "bool":{
            "should":[
              {
                "match":{
                    "category":"华为"
                }
              },
              {
                "match":{
                    "category":"小米"
                }
              },
              {
                "match":{
                    "category":"OPPO"
                }
              }                          
            ],
            "filter":{
                "range":{
                    "price":{
                        "gt":5000
                    }
                }
            }
        }
    }
}      

3.14 match、match_phrase

match:分词搜索,会把查询关键词先进行分词,然后进行搜索

例:下面的查询会把category含有小或含有华的都查出来
GET /shoppting/_search
{
    "query":{
        "match":{
            "category":"小华"
        }
    }
}      

match_phrase:精确查询(完全匹配)

例:下面的查询指挥查询category为小米的文档
GET /shoppting/_search
{
    "query":{
        "match_phrase":{
            "category":"小米"
        }
    }
}      

3.15 对查询结果的某些字段进行高亮显示(highlight)

使用highlight对查询结果的某些字段进行高亮显示
GET /shoppting/_search
{
    "query":{
        "match_phrase":{
            "category":"小米"
        }
    },
    "highlight":{
        "fields":{
            "category":{}
        }
    }
}      

3.16 聚合查询(aggs)

aggregations:聚合

significant:重要

3.16.1 分组查询(terms)

按price字段进行分组
GET /shopping/_search
{
    "aggs":{
        "category_group":{
            "terms":{
                "field": "price"
            }
        }
    }
}

默认会一并将所有文档信息也查出来,如果不需要查询文档信息,可以指定size为0
GET /shopping/_search
{
    "aggs":{
        "category_group":{
            "terms":{
                "field": "price"
            }
        }
    },
    "size": 0
}      
elasticsearch基本操作(ES7.x入门)

 3.16.2 求平均值(avg)

查询所有文档price的平均值
GET /shopping/_search
{
    "aggs":{
        "category_avg":{
            "avg":{
                "field": "price"
            }
        }
    }
}

不查询文档详细信息
GET /shopping/_search
{
    "aggs":{
        "category_avg":{
            "avg":{
                "field": "price"
            }
        }
    },
    "size": 0
}      
elasticsearch基本操作(ES7.x入门)

 3.17 映射(_mapping)

映射类似与MySQL中的表设计,包括约束指定字段的类型(text、keyword等)。text类型的字段支持分词,keyword类型的字段不支持分词、必须完全匹配。

keyword类型的字段才支持聚合查询(例如:分组)

通过type指定字段类型,通过index指定该字段是否可以被索引查询,当index为false时,将无法通过该字段进行查询。

GET /user/_mapping

{
    "properties":{
        "name":{
            "type": "text",
            "index": true
        },
        "sex":{
            "type": "text",
            "index": true
        },
        "tel":{
            "type": "text",
            "index": true
        },
        "province":{
            "type":"keyword",
            "index":"true"
        }                
    }
}      

3.18 分片

分片类似MySQL中的分表,创建索引时,默认3个分片,这个分片数量是可以修改的。

PUT 索引名/_settings
{
    "number_of_replicas":2
}      

3.19 文档分析

analyzer常见值

standard:标准分词器

GET /_analyze

analyzer为分词器的名称,standard为默认的分词器,可以安装分词器插件。
{
    "analyzer":"standard",
    "text":"this is my blog"
}      

3.20 索引模板

3.20.1 查看全部索引模板

ip/_template      

3.20.2 查看某个索引模板的内容

ip/_template/索引模板名称*      

3.20.3 创建索引模板

创建一个名为mytemplate的索引模板,当创建名为mysqlaudit-开头的索引时生效。

PUT /_template/mytemplate

{
"order":1,
"index_patterns":["mysqlaudit-*"],
"mappings":{
   "properties":{
     "middleware_name":{
        "type":"keyword",
        "index":true
     },
     "k8s_pod_namespace":{
        "type":"keyword",
        "index":true
     },
     "query":{
        "type":"text",
        "index":true,
        "analyzer":"ik_max_word"
     }
    }
},
"settings":{
   "index": {
      "max_result_window": "30000000"
    }
}
}