【ES】学习3-请求体查询
1.空查询
GET /index_2014*/type1,type2/_search
{}
GET /_search { "from": 30, "size": 10 }
2.查询表达式
GET /_search { "query": YOUR_QUERY_HERE }
查询全部 match_all 跟空查询等价
GET /_search { "query": { "match_all": {} } }
针对某个字段,结构
{
QUERY_NAME: {
FIELD_NAME: {
ARGUMENT: VALUE,
ARGUMENT: VALUE,...
}
}
}
GET /_search { "query": { "match": { "tweet": "elasticsearch" } } }
3.查询与过滤
查询:一个评分的匹配,计算相似度
过滤:一个不评分的匹配,只有是或否。过滤的性能更好。
4.重要字段
match_all:匹配所有
{ "match_all": {}}
match:全文匹配或精确匹配
{ "match": { "tweet": "About Search" }} { "match": { "age": 26 }} { "match": { "date": "2014-09-01" }} { "match": { "public": true }} { "match": { "tag": "full_text" }}
multi_match:在多个字段上执行相同的match查询
{ "multi_match": { "query": "full text search", "fields": [ "title", "body" ] } }
{ "range": { "age": { "gte": 20, "lt": 30 } } }
term:用于精确值 匹配,这些精确值可能是数字、时间、布尔或者那些not_analyzed
的字符串
{ "term": { "age": 26 }} { "term": { "date": "2014-09-01" }} { "term": { "public": true }} { "term": { "tag": "full_text" }}
terms:和 term
查询一样,但它允许你指定多值进行匹配。如果这个字段包含了指定值中的任何一个值,那么这个文档满足条件
{ "terms": { "tag": [ "search", "full_text", "nosql" ] }}
exists:查找指定字段中有值的文档
{ "exists": { "field": "title" } }
missing:查找指定字段中无值的文档
5.组合多查询
bool:将多查询组合在一起。它支持参数:
must:
文档 必须 匹配这些条件才能被包含进来。
must_not:
文档 必须不 匹配这些条件才能被包含进来。
should:
如果满足这些语句中的任意语句,将增加 _score
,否则,无任何影响。它们主要用于修正每个文档的相关性得分。
filter:
必须 匹配,但它以不评分、过滤模式来进行。这些语句对评分没有贡献,只是根据过滤标准来排除或包含文档。
{ "bool": { "must": { "match": { "title": "how to make millions" }}, "must_not": { "match": { "tag": "spam" }}, "should": [ { "match": { "tag": "starred" }} ], "filter": { "range": { "date": { "gte": "2014-01-01" }} } } }
{ "bool": { "must": { "match": { "title": "how to make millions" }}, "must_not": { "match": { "tag": "spam" }}, "should": [ { "match": { "tag": "starred" }} ], "filter": { "bool": { "must": [ { "range": { "date": { "gte": "2014-01-01" }}}, { "range": { "price": { "lte": 29.99 }}} ], "must_not": [ { "term": { "category": "ebooks" }} ] } } } }
constant_score查询:
它将一个不变的常量评分应用于所有匹配的文档。它被经常用于你只需要执行一个 filter 而没有其它查询(例如,评分查询)的情况下。可以使用它来取代只有 filter 语句的 bool
查询。
{ "constant_score": { "filter": { "term": { "category": "ebooks" } } } }
6. 验证查询
_validate, explain:判断查询是否合法以及原因。
GET /gb/tweet/_validate/query?explain { "query": { "tweet" : { "match" : "really powerful" } } }