elasticsearch 初步使用常用语法总结(依据官方文档)

GET /_cat/health?v  查看健康状态  ?v 显示字段名

GET /_cat/nodes?v  查看节点情况

GET /_cat/indices?v   查看索引

PUT /customer?pretty 添加名为customer的索引

添加数据:

PUT /customer/doc/1?pretty    为customer 添加标识为1的文档,内容为"name":"John doe"  pretty打印响应json
{
  "name": "John Doe"
}
如果客户索引事先不存在,则Elasticsearch将自动创建索引。标识同理。
POST /customer/doc?pretty  使用post将自动创建标识
{
  "name": "Jane Doe"
}
若多次执行PUT /customer/doc/1?pretty,则提交的json内容将替换标识1下的文档
GET /customer/doc/1?pretty    查看customer索引下标识id为1的文档内容
DELETE /customer?pretty  删除customer索引

  更新:

POST /customer/doc/1/_update?pretty  更新标识为1的文档,添加年龄字段
{
  "doc": { "name": "Jane Doe" ,"age":20}
}
POST /customer/doc/1/_update?pretty  简单脚本,年龄将增加5,ctx.source指即将更新的当前源文档(没有修改源文档)
{ 
  “script”:“ctx._source.age += 5” 
}

  批处理:

POST /customer/doc/_bulk?pretty 更新1、2两篇文档
{"index":{"_id":"1"}}
{"name": "John Doe" }
{"index":{"_id":"2"}}
{"name": "Jane Doe" }
POST /customer/doc/_bulk?pretty更新文档1,删除文档2
{"update":{"_id":"1"}}
{"doc": { "name": "John Doe becomes Jane Doe" } }
{"delete":{"_id":"2"}}

  精确删除操作、排序

POST twitter/_delete_by_query    _delete_by_query对匹配查询的每个文档执行删除操作
{
  "query": { 
    "match": {
      "message": "some message"
    }
  }
}
GET /bank/_search?q=*&sort=account_number:asc&pretty 
q=*标识所有文档,sort=account_number:asc表示按照account_number进行排序
结果:
took - Elasticsearch执行搜索的时间(以毫秒为单位)
timed_out - 告诉我们搜索是否超时
_shards - 告诉我们搜索了多少个分片,以及搜索成功/失败分片的数量
hits - 搜索结果
hits.total - 符合我们搜索条件的文档总数
hits.hits - 实际的搜索结果数组(默认为前10个文档)
hits.sort - 对结果进行排序键(如果按分数排序则丢失)
hits._score并max_score- 暂时忽略这些字段
GET /bank/_search        
{
  "query": { "match_all": {} },
  "sort": [
    { "account_number": "asc" }
  ]
}

  设置查找属性

GET /bank/_search   
{
  "query": { "match_all": {} },
  "from": 10,   起始文档位置
  "size": 10  展示文档数量
}

  精确查找

GET /bank/_search
{
  “query”:{“match_all”:{}},
  “_source”:[“account_number”,“balance”]  只显示bank索引的account_number和balance对应字段
}

  精确匹配及模糊查找

GET / bank / _search
{
  “query”:{“match”:{“address”:“mill lane”}} 精确匹配“address”:“maill lane”
}
若要模糊匹配,则需要将“match”更换成“match_phrase”匹配词组

  多项匹配

GET / bank / _search / bank / _search 
{ 
  “query”:{ 
    “bool”:{      #bool与must配套使用
      “must”:[       
        {“match”:{“address” :“mill”}},
        {“match”:{“address”:“lane”}} 
      ] 
    } 
  }         
} 
#must 必须出现在文档中 must字句中match所有都必须为真
#filter 必须出现在文档中,忽略scor, filter 字句中所有match都必须为真
#should 字句应出现在文档中,bool中若有must或者filter子句, should中任何一个match匹配都视为匹配
#must_not 不得出现在匹配的文档。字句在过滤上下文中执行,忽略scor使用子句进行高速缓存。 所有match都不匹配

  

GET / bank / _search 
{ 
  “query”:{ 
    “bool”:{ 
      “must”:{“match_all”:{}}, 
      “filter”:{ 
        “range”:{   #范围
          “balance”:{  
            “gte”:20000,  #大于
            “lte”:30000    #小于
          } 
        } 
      } 
    } 
  } 
}

  

GET /bank/_search
{
  "size": 0,
  "aggs": {
    "group_by_state": {   按状态对所有账户分组
      "terms": {
        "field": "state.keyword"
      }
    }
  }
}
类似于SELECT state, COUNT(*) FROM bank GROUP BY state ORDER BY COUNT(*) DESC

  

GET /bank/_search
{
  "size": 0,
  "aggs": {
    "group_by_age": {    按年龄20-29 。。。分组 最后得到每个年龄段的平均账户余额
      "range": {
        "field": "age",
        "ranges": [
          {
            "from": 20,
            "to": 30
          },
          {
            "from": 30,
            "to": 40
          },
          {
            "from": 40,
            "to": 50
          }
        ]
      },
      "aggs": {
        "group_by_gender": {
          "terms": {
            "field": "gender.keyword",
	"order":{    #排序
    "average_balance":"desc"  
    }
          },
          "aggs": {
            "average_balance": {  基于组合进行计算
              "avg": {
                "field": "balance"
              }
            }
          }
        }
      }
    }
  }
}

  

原文地址:https://www.cnblogs.com/tylf-lk/p/11287020.html