ElasticSearch入门教程【四】- 基本用法

教程列表

ElasticSearch入门教程【一】- 简介
ElasticSearch入门教程【二】- 安装
ElasticSearch入门教程【三】- Head插件
ElasticSearch入门教程【四】- 基本用法
ElasticSearch入门教程【五】- TransportClient客户端
ElasticSearch入门教程【六】- spring-boot-starter-data-elasticsearch

文章目录

        • 一、创建索引
        • 二、插入数据
          • 1. 指定文档id插入
          • 2. 自动生成文档id插入
        • 三、更新数据
          • 1. 直接更新
          • 2. 脚本更新
        • 四、删除数据
          • 1. 删除文档
          • 2. 删除索引
        • 五、查询数据
          • 1. 简单查询
          • 2. 条件查询
          • 3. 复合查询

Elasticsearch为开发者提供了丰富的基于Http协议的 RESTful API,通过简单的Rest请求,就可以实现非常强大的功能。

RESTful API基本格式如下,以http方法决定动作:GET/PUT/POST/DELETE

http://<ip>:<port>/<索引>/<类型>/<文档id>

这里我们使用PostmanElasticsearch发送RESTful API请求。

一、创建索引

创建一个名为people的索引,其中包含一个名为student的类型,该类型有四个属性,姓名name、地址address、年龄age、生日birthday
ElasticSearch入门教程【四】- 基本用法_第1张图片
请求信息:

URL: http://192.168.255.150:9200/people
METHOD: PUT
Content-Type: application/json
REQUEST:
    {
        "settings": {
            "number_of_shards": "5",
            "number_of_replicas": "1"
        },
        "mappings": {
            "student": {
                "properties": {
                    "name": {
                        "type": "text"
                    },
                    "address": {
                        "type": "keyword"
                    },
                    "age": {
                        "type": "integer"
                    },
                    "birthday": {
                        "type": "date",
                        "format": "yyyy-MM-dd HH:mm:ss||epoch_millis"
                    }
                }
            }	
        }
    }

二、插入数据

1. 指定文档id插入

id需在在url中手动指定,例如指定id为1,插入文档到people索引,student类型
ElasticSearch入门教程【四】- 基本用法_第2张图片
请求信息:

URL: http://192.168.255.150:9200/people/student/1
METHOD: PUT
Content-Type: application/json
REQUEST:
    {
		"name": "rkyao",
		"address": "杭州",
		"age": 26,
		"date": "1994-01-01 12:00:00"
	}
2. 自动生成文档id插入

id会自动生成不需手动指定
ElasticSearch入门教程【四】- 基本用法_第3张图片
请求信息:

URL: http://192.168.255.150:9200/people/student
METHOD: POST
Content-Type: application/json
REQUEST:
    {
		"name": "rkyao2",
		"address": "杭州",
		"age": 26,
		"date": "1994-01-01 12:00:00"
	}

三、更新数据

更新操作需在url中加上关键词_update

1. 直接更新

直接更新索引为people,类型为student,id为1的文档,修改name字段
ElasticSearch入门教程【四】- 基本用法_第4张图片
请求信息:

URL: http://192.168.255.150:9200/people/student/1/_update
METHOD: POST
Content-Type: application/json
REQUEST:
    {
        "doc": {
            "name":"Q"
        }
    }
2. 脚本更新

(1) 脚本更新索引为people,类型为student,id为1的文档,将age字段加1
ElasticSearch入门教程【四】- 基本用法_第5张图片
请求信息:

URL: http://192.168.255.150:9200/people/student/1/_update
METHOD: POST
Content-Type: application/json
REQUEST:
    {
        "script": {
            "lang": "painless",
            "inline": "ctx._source.age += 1"
        }
    }

(2) 脚本更新索引为people,类型为student,id为1的文档,将age字段设置为25
ElasticSearch入门教程【四】- 基本用法_第6张图片
请求信息:

URL: http://192.168.255.150:9200/people/student/1/_update
METHOD: POST
Content-Type: application/json
REQUEST:
    {
        "script": {
            "lang": "painless",
            "inline": "ctx._source.age = params.age",
            "params": {
                "age" : 25
            }
        }
    }

四、删除数据

1. 删除文档

删除索引为people,类型为student,id为1的文档
ElasticSearch入门教程【四】- 基本用法_第7张图片
请求信息:

URL: http://192.168.255.150:9200/people/student/1
METHOD: DELETE
2. 删除索引

删除索引people
ElasticSearch入门教程【四】- 基本用法_第8张图片
请求信息:

URL: http://192.168.255.150:9200/people
METHOD: DELETE

五、查询数据

1. 简单查询

查询条件放在url中,例如查询people索引student类型中id为1的数据
ElasticSearch入门教程【四】- 基本用法_第9张图片
请求信息:

URL: http://192.168.255.150:9200/people/student/1
METHOD: GET

2. 条件查询

url中需添加关键字_search

(1) 查询所有数据
ElasticSearch入门教程【四】- 基本用法_第10张图片
请求信息:

URL: http://192.168.255.150:9200/people/student/_search
METHOD: POST
Content-Type: application/json
REQUEST:
    {
        "query": {
            "match_all": {}
        }
    }

(2) 指定返回条数
ElasticSearch入门教程【四】- 基本用法_第11张图片
请求信息:

URL: http://192.168.255.150:9200/people/student/_search
METHOD: POST
Content-Type: application/json
REQUEST:
    {
        "query": {
            "match_all": {}
        },
        "from": 1,
        "size": 2
    }

(3) match模糊查询,查询字段为name,查询值为rkyao hello,查询时会先将rkyao hello分词,返回包含rkyaohello的数据,结果可能为

  • rkyao
  • hello
  • rkyao hello
  • hello rkyao
  • hello haha rkyao
  • rkyao haha hello

ElasticSearch入门教程【四】- 基本用法_第12张图片
请求信息:

URL: http://192.168.255.150:9200/people/student/_search
METHOD: POST
Content-Type: application/json
REQUEST:
    {
        "query": {
            "match": {
                "name": "rkyao hello"
            }
        }
    }

(4) match_phrase模糊查询,查询字段为name,查询值为rkyao hello,查询时会将rkyao hello作为一个整体去模糊匹配,结果可能为

  • rkyao hello
  • rkyao hello haha
  • haha rkyao hello
    ElasticSearch入门教程【四】- 基本用法_第13张图片
    请求信息:
URL: http://192.168.255.150:9200/people/student/_search
METHOD: POST
Content-Type: application/json
REQUEST:
    {
        "query": {
            "match_phrase": {
                "name": "rkyao hello"
            }
        }
    }

(5) 多字段模糊查询,返回nameaddress字段中包含rkyao的数据

ElasticSearch入门教程【四】- 基本用法_第14张图片
请求信息:

URL: http://192.168.255.150:9200/people/student/_search
METHOD: POST
Content-Type: application/json
REQUEST:
    {
        "query": {
            "multi_match": {
                "query": "rkyao",
                "fields": ["name", "address"]
            }
        }
    }

(6) query_string语法查询,语法可以包含在查询值里,例如使用OR逻辑,查询nameaddress字段中包含rkyaohello的数据

ElasticSearch入门教程【四】- 基本用法_第15张图片
请求信息:

URL: http://192.168.255.150:9200/people/student/_search
METHOD: POST
Content-Type: application/json
REQUEST:
    {
        "query": {
            "query_string": {
                "query": "rkyao OR hello",
                "fields": ["name", "address"]
            }
        }
    }

(6) term精确查询,查询address杭州的数据

ElasticSearch入门教程【四】- 基本用法_第16张图片
请求信息:

URL: http://192.168.255.150:9200/people/student/_search
METHOD: POST
Content-Type: application/json
REQUEST:
    {
        "query": {
            "term": {
                "address": "杭州"
            }
        }
    }

(7) 范围查询,查询age在20到30之间的数据

gte大于等于,lte小于等于,gt大于,`lte小于

ElasticSearch入门教程【四】- 基本用法_第17张图片
请求信息:

URL: http://192.168.255.150:9200/people/student/_search
METHOD: POST
Content-Type: application/json
REQUEST:
    {
        "query": {
            "range": {
                "age": {
                    "gte": 20,
                    "lte": 30
                }
            }
        }
    }

(8) 子条件查询,查询时只判断文档是否满足条件,不计算匹配度

ElasticSearch入门教程【四】- 基本用法_第18张图片
请求信息:

URL: http://192.168.255.150:9200/people/student/_search
METHOD: POST
Content-Type: application/json
REQUEST:
    {
        "query": {
            "bool": {
                "filter": {
                    "term": {
                        "name": "rkyao"
                    }
                }
            }
        }
    }

(9) 指定排序,例如日期birthday降序返回
ElasticSearch入门教程【四】- 基本用法_第19张图片
请求信息:

URL: http://192.168.255.150:9200/people/student/_search
METHOD: POST
Content-Type: application/json
REQUEST:
    {
        "query": {
            "match": {
                "name": "rkyao"
            }
        },
        "sort": [
            {
                "birthday": {"order": "desc"}
            }
        ]
    }

(9) 查询函数,可使用一些函数进行较复杂的查询操作,如terms、stats、max、min等,下面示范根据字段age进行聚合查询
ElasticSearch入门教程【四】- 基本用法_第20张图片
请求信息:

URL: http://192.168.255.150:9200/people/student/_search
METHOD: POST
Content-Type: application/json
REQUEST:
    {
        "aggs": {
            "group_by_age": {
                "terms": {
                    "field": "age"
                }
            }
        }
    }

3. 复合查询

(1) 固定分数查询,可以通过boost固定分数,不支持 match 只支持 filter
ElasticSearch入门教程【四】- 基本用法_第21张图片
请求信息:

URL: http://192.168.255.150:9200/people/student/_search
METHOD: POST
Content-Type: application/json
REQUEST:
    {
        "query": {
            "constant_score": {
                "filter": {
                    "match": {
                        "name": "rkyao"
                    }
                },
                "boost": 2
            }
        }
    }

(2) 布尔查询

should关键字,查询name包含rkyao或者address包含杭州的数据
ElasticSearch入门教程【四】- 基本用法_第22张图片
请求信息:

URL: http://192.168.255.150:9200/people/student/_search
METHOD: POST
Content-Type: application/json
REQUEST:
    {
        "query": {
            "bool": {
                "should": [
                    {
                        "match": {
                            "name": "rkyao"
                        }
                    },
                    {
                        "match": {
                            "address": "杭州"
                        }
                    }
                ]
            }
        }
    }

must关键字,查询name包含rkyao并且address包含杭州的数据
ElasticSearch入门教程【四】- 基本用法_第23张图片
请求信息:

URL: http://192.168.255.150:9200/people/student/_search
METHOD: POST
Content-Type: application/json
REQUEST:
    {
        "query": {
            "bool": {
                "must": [
                    {
                        "match": {
                            "name": "rkyao"
                        }
                    },
                    {
                        "match": {
                            "address": "杭州"
                        }
                    }
                ]
            }
        }
    }

must_not关键字,查询name不包含rkyao并且address不包含杭州的数据
ElasticSearch入门教程【四】- 基本用法_第24张图片
请求信息:

URL: http://192.168.255.150:9200/people/student/_search
METHOD: POST
Content-Type: application/json
REQUEST:
    {
        "query": {
            "bool": {
                "must_not": [
                    {
                        "match": {
                            "name": "rkyao"
                        }
                    }
                ]
            }
        }
    }

你可能感兴趣的:(elasticsearch)