官方文档:https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html
9.基本使用
ES 是RESTful 风格的系统,所以我们需要先掌握RESTful 的四个关键词:PUT(修改),POST(添加),DELETE(删除),GET(查询)。其中在ES里面PUT和POST的界限并不是很分明,有时候PUT也作为添加。
不设置文档类型时,默认文档类型为_doc
基本数据类型:
- 字符串类型:text、keyword
- 数值类型:long、integer、short、byte、double、float、half float、scaled float
- 日期类型:date
- 布尔类型:boolean
- 二进制类型:binary
API基本格式: http:// < ip > : < port >/<索引>/<类型>/<文档id>
在kibana中可以省去http:// < ip > : < port >
9.1索引创建
相当于创建库
API基本格式: http:// < ip > : < port >/<索引> (http://localhost:9100/book)
HTTP动词:PUT
PUT /book
{
"settings": {
"number_of_shards" : 3,
"number_of_replicas" : 1
},
"mappings" : {
"properties" :{
"name" : {
"type" : "text"
},
"country" : {
"type" : "keyword"
},
"age" :{
"type" : "integer"
},
"date" : {
"type" : "date",
"format" : "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
}
}
}
}
创建成功提示信息
9.2 插入
9.2.1指定文档id插入
API基本格式: http:// < ip > : < port >/<索引>/<类型>/<文档id> (http://localhost:9100/book/_doc/1)
HTTP动词:PUT
PUT /book/_doc/1
{
"name" : "核心原理",
"country" : "CN",
"age" : 18,
"date" : "2022-03-23"
}
自动产生文档id插入
API基本格式: http:// < ip > : < port >/<索引>/<类型>
HTTP动词:POST
POST /book/_doc
{
"name" : "编程核心原理",
"country" : "CN",
"age" : 25,
"date" : "2021-04-12"
}
9.3 修改
API基本格式: http:// < ip > : < port >/<索引>/<类型>/<文档id>/_update
HTTP动词:POST
直接修改文档
POST /book/_doc/1/_update
{
"doc" : {
"name" : "深入核心原理"
}
}
脚本修改文档
script
中内容有不同的脚本语言这里就不详细的介绍了
POST /book/_doc/1/_update
{
"script" : {
"lang" : "painless",
"inline" : "ctx._source.age += 10"
}
}
9.4 删除
HTTP动词:DELETE
删除文档
API基本格式: http:// < ip > : < port >/<索引>/<类型>/<文档id>
DELETE /book/_doc/1
删除索引
API基本格式: http:// < ip > : < port >/<索引>
DELETE /book
9.5 查询
9.5.1简单查询
API基本格式: http:// < ip > : < port >/<索引>/<类型>/<文档id>
HTTP动词:GET
GET /book/_doc/1
9.5.2条件查询
API基本格式: http:// < ip > : < port >/<索引>/_search
HTTP动词:POST
9.5.2.1查询全部
POST /book/_search
{
"query": {
"match_all": {}
}
}
9.5.2.2 从哪开始,返回几个 (from,size)
POST /book/_search
{
"query": {
"match_all": {}
},
"from": 0,
"size": 1
}
9.5.2.3 匹配查询 (match)
POST /book/_search
{
"query": {
"match": {
"name" : "编程"
}
}
}
9.5.2.4 匹配权重查询(sort)
POST /book/_search
{
"query": {
"match": {
"name" : "核心原理"
}
},
"sort": [
{
"age": {
"order": "asc"
}
}
]
}
9.5.3聚合查询(ages)
9.5.3.1 分类(terms)
POST /book/_search
{
"aggs": {
"group_by_date": {
"terms": {
"field": "date"
}
},
"group_by_country":{
"terms": {
"field": "country"
}
}
}
}
9.5.3.2 统计(stats)
POST /book/_search
{
"aggs": {
"group_by_date": {
"stats": {
"field": "age"
}
}
}
}
9.6 高级查询
子条件查询(特定字段查询所指特定值)
Query context :
在查询过程中,除了判断文档是否满足查询条件外,ES还会计算一个_score
来标识匹配的程度,旨在判断目标文档和条件查询条件匹配的有多好
全文本查询(针对文本类型数据)
API基本格式: http:// < ip > : < port >/<索引>/_search
HTTP动词:POST
- 模糊匹配:
当我们查找核心原理时,es会查找与核心,和原理能够匹配的数据,因此,在模糊条件下查找核心原理这一数据,将会把超级核心、核心超级原理、核心原理和编程核心原理都返回回来
POST /book/_search
{
"query": {
"match": {
"name": "核心原理"
}
}
}
- 习语查询
习语匹配与模糊匹配不同,当需要配匹核心原理时,只会返回包含核心原理的数据,并不会返回与之类似的
POST /book/_search
{
"query": {
"match_phrase": {
"name": "核心原理"
}
}
}
- 多个字段模糊匹配查询(keyword不允许)
POST /book/_search
{
"query": {
"multi_match": {
"query": "18",
"fields": ["name", "age"]
}
}
}
- 语法查询(OR、AND)
POST /book/_search
{
"query": {
"query_string": {
"query": "USA编程 AND 超级核心原理"
}
}
}
- 语法查询(OR、AND)(指定多个字段)
POST /book/_search
{
"query": {
"query_string": {
"query": "java OR 编程",
"fields": ["name", "country"]
}
}
}
字段级别查询(针对结构化数据、如数字、日期等)
- 数据具体查询
POST /book/_search
{
"query": {
"term": {
"age": 18
}
}
}
- 数据范围查询
- gt 大于
gte 大于等于
lt小于
lte小于等于
POST /book/_search
{
"query": {
"range": {
"age": {
"gte": 18,
"lte": 33
}
}
}
}
Filter context
查询过程中,只判断该文档是否满足条件,只有Yes和No
POST /book/_search
{
"query": {
"bool": {
"filter": [
{
"term": {
"age": "18"
}
}
]
}
}
}
复合条件查询(以一定的逻辑组合子条件查询)
固定分数查询
会将权重调成所设定的分数
POST /book/_search
{
"query": {
"constant_score": {
"filter": {
"match":{
"name" : "核心原理"
}
},
"boost": 1.2
}
}
}
布尔查询
- should(满足其中一个条件即可)
POST /book/_search
{
"query": {
"bool": {
"should": [
{
"match": {
"age": "18"
}
},
{
"match": {
"name": "java"
}
}
]
}
}
}
- must(需要同时满足两个条件)
POST /book/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"age": "90"
}
},
{
"match": {
"name": "java"
}
}
]
}
}
}
- must_not(一定要不满足)
POST /book/_search
{
"query": {
"bool": {
"must_not": [
{
"match": {
"age": "90"
}
},
{
"match": {
"name": "java"
}
}
]
}
}
}
10 高亮显示
POST /book/_search
{
"query":{
"match": {
"name": "java"
}
},
"highlight":{
"pre_tags": "<p class='key' style='color:red'>",
"post_tags": "</p>",
"fields":{
"name":{}
}
}
}