本文示例从《Elasticsearch权威指南》获取,仅作为读书笔记。如需要查看详情,可以查看该书的具体内容。
一、查看ES是否启动成功
GET localhost:9200/?pretty
{
"name": "DESKTOP-8MG3VHL",
"cluster_name": "elasticsearch",
"cluster_uuid": "zmUJSU-FSkKrLG5UhXrBwQ",
"version": {
"number": "7.6.2",
"build_flavor": "default",
"build_type": "tar",
"build_hash": "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
"build_date": "2020-03-26T06:34:37.794943Z",
"build_snapshot": false,
"lucene_version": "8.4.0",
"minimum_wire_compatibility_version": "6.8.0",
"minimum_index_compatibility_version": "6.0.0-beta1"
},
"tagline": "You Know, for Search"
}
- 以下示例省略:http://localhost:9200
二、查询文档数量
GET /_count?pretty
{
"count": 20,
"_shards": {
"total": 4,
"successful": 4,
"skipped": 0,
"failed": 0
}
}
同样效果
GET /_count?pretty
{
"query":{
"match_all":{}
}
}
三、基础操作
elasticsearch操作基于restful api进行操作,所以在操作的过程中需要注意
请求方法
1、添加文档
PUT /megacory/employee/1
{
"first_name":"John",
"last_name":"Smith",
"age":25,
"about":"I love to go rock climbing",
"interests":["sports","music"]
}
2、获取文档
GET /megacory/employee/1
{
"_index" : "megacorp",
"_type" : "employee",
"_id" : "1",
"_version" : 1,
"found" : true,
"_source" : {
"first_name" : "John",
"last_name" : "Smith",
"age" : 25,
"about" : "I love to go rock climbing",
"interests": [ "sports", "music" ]
}
}
3、删除文档
DELETE /megacory/employee/1
- 如果我们要编辑数据,可以使用
PUT
方法进行更新操作。
4、搜索指定index、type的所有文档信息
GET /megacory/employee/_search
5、搜索指定关键字的内容
GET /megacory/employee/_search?last_name:Smith
四、DSL语句查询(Domain Specific Language)
1、基于match
关键字查询
GET /megacory/employee/_search
{
"query":{
"match":{
"last_name":"Smith"
}
}
}
2、通过filter
过滤查询
GET /megacory/employee/_search
{
"filtered":{
"filter":{
"range":{
"age":{"gt":30}
}
},
"query":{
"match":{
"last_name":"Smith"
}
}
}
}
filtered
关键字对query
查询出的数据用filter
中的条件进行过滤,查询出age
大于30
的数据
五、全文检索
elasticsearch通过
_score
的方式进行搜索匹配度排序,分值越高的越靠前
GET /megacory/employee/_search
{
"query":{
"match":{
"about":"rock climbing"
}
}
}
搜索出多条记录,按照
_score
进行排序。此时查询的结果中包含rock
、climbing
、rock climbing
的都会被查询出来
六、短语搜索
GET /megacory/employess/_search
{
"query":{
"match_phrase":{
"about":"rock climbing"
}
}
}
通过
短语搜索
关键字match_phrase
进行匹配时,匹配的内容严格按照rock climbing
进行匹配,匹配过程中不会把关键字进行拆分。
七、高亮搜索关键字
GET /megacory/employess/_search
{
"query":{
"match_phrase":{
"about":"rokc climbing"
}
},
"highlight":{
"fields":{
"about":{}
}
}
}
通过关键字
highlight
进行高亮显示设置。当设置了高亮属性后,查询结果会给关键字加上标签
八、聚合分析
聚合分析通过关键字
agg
进行操作。
1、根据某个字段统计
GET /megacory/employees/_search
{
"aggs":{
"all_interests":{
"terms":{
"field":"interests"
}
}
}
}
-
aggs
聚合分析操作关键字 -
all_interests
自定义返回结果key -
term
指定需要分析的字段名
- 返回结果:
{
"aggregations": {
"all_interests": {
"buckets": [
{
"key": "music",
"doc_count": 2
},
{
"key": "forestry",
"doc_count": 1
},
{
"key": "sports",
"doc_count": 1
}
]
}
}
}
- 结果中默认生成以
doc_count
为key的文档统计数量,该统计数量对应指定field -
aggregations
返回分析结果 -
buckets
返回结果集
2、在查询结果中进行聚合分析
通过一定条件进行过滤,再把过滤出来的数据进行聚合分析。例子:统计last_name为smith的用户兴趣爱好
GET /megacory/employee/_search
{
"query":{
"match":{
"last_name":"smith"
}
},
"aggs":{
"all_interests":{
"terms":{
"field":"interests"
}
}
}
}
3、聚合分级汇总
基于聚合统计数据再进行统计汇总。例子:根据interests field进行汇总,并统计汇总中所有人的平均年龄。
GET /megacory/emloyee/_search
{
"aggs":{
"all_interests":{
"terms":{"field":"interests"},
"aggs":{
"avg_age":{
"avg":{"field":"age"}
}
}
}
}
}
-
avg
求指定field的平均值 - 注意
aggs
层级关系