本文介绍elasticsearch的查询细节
1. 简单查询
查询语句 | 查询说明 |
---|---|
/_search | 在所有索引的所有类型中搜索 |
/gb/_search | 在索引gb的所有类型中搜索 |
/gb,us/_search | 在索引gb和us的所有类型中搜索 |
/g*,u*/_search | 在以g或u开头的索引的所有类型中搜索 |
/gb/user/_search | 在索引gb的类型user中搜索 |
/gb,us/user,tweet/_search | 在索引gb和us的类型为user和tweet中搜索 |
/_all/user,tweet/_search | 在所有索引的user和tweet中搜索 |
/_search?size=5&from=10 | 分页 size 结果数 默认10 from 跳过开始的结果数,默认0 |
GET /_all/tweet/_search?q=tweet:elasticsearch
下面语句查找name字段中包含"john"和tweet字段包含"mary"的结果。实际的查询只需要:
GET /_all/tweet/_search?q=+name:john++tweet:mary
2. 结构化查询DSL
实际查询中,往往比这复杂的多,需要用到 query DSL 结构化的查询语句,来发送请求体
详细参见 :https://es.xiaoleilu.com/054_Query_DSL/70_Important_clauses.html
查询关键词 | 说明 | 用例 |
---|---|---|
term | 用于精确匹配哪些值 | { “term”: { “date”: “2014-09-01” }} |
terms | 多个值进行精确匹配 | { “terms”: { “tag”: [ “search”, “full_text”, “nosql” ] } } |
range | 范围查询 | { “range”: { “age”: {“gte”: 20,“lt”: 30 } } } |
exists /missing | 查找文档中是否包含指定字段或没有某个字段 类似于 IS_NULL | { “exists”: {“field”: “title” } } |
bool | 用来合并多个条件 | must (and) /must_not (not)/should (or) |
match_all | 查询所有文档 | { “match_all”: {}} |
match | 它指定了一个确切值,在遇到数字,日期,布尔值或者not_analyzed 的字符串时,它将为你搜索你给定的值 否则类似于like | { “match”: { “tag”:“full_text”}} |
multi_match | match上同时搜索多个字段 类似 or…like | { “multi_match”: {“query”: “full text search”,“fields”: [ “title”, “body” ] } } |
更多查询:https://dzone.com/articles/23-useful-elasticsearch-example-queries
3. 验证查询语句的正确性
验证正确性
GET /gb/tweet/_validate/query
解释查询语句的错误原因及位置
GET /_validate/query?explain
4. sql转换成es查询
可以下载 Elastic HD