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" } } } } } } } }
如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的其他事物相联系。通过联系,你可将想法内化于心,从各种角度看问题,直至找到适合自己的方法。这才是思考的真谛!
──马文·明斯基