ES提供了丰富多彩的查询接口,可以满足各种各样的查询要求。更多内容请参考:ELK修炼之道
举个例子
GET _search
{
"query": {
"bool": {
"must": [
{ "match": { "title": "Search" }},
{ "match": { "content": "Elasticsearch" }}
],
"filter": [
{ "term": { "status": "published" }},
{ "range": { "publish_date": { "gte": "20150101" }}}
]
}
}
}
Leaf query Cluase 叶子查询(简单查询) 这种查询可以单独使用,针对指定的字段查询指定的值。
Compound query clauses 复杂查询 复杂查询可以包含叶子或者其它的复杂查询语句,用于组合成复杂的查询语句,比如not, bool等。
查询虽然包含这两种,但是查询的行为还与查询的执行环境有关,不同的执行环境,查询操作也不一样。 查询的行为取决于他们所在的查询上下文,包括Query查询上下文和Filter查询上下文。
_score
相关性分值,分数越高,匹配度越高,默认返回是越靠前。这里关于分值的计算不再介绍,以后再做介绍。举个简单的例子:
性能差异 使用过滤语句得到的结果集———一个简单的文档列表,快速匹配运算并存入内存是非常方便的,每个文档仅需1个字节。这些缓存的过滤结果集与后续请求的结合使用时非常高效的。 查询语句不仅要查找相匹配的文档,还需要计算每个文档的相关性,所以一般来说查询语句要比过滤语句更耗时,并且查询结果也不可缓存。 幸亏有了倒排索引,一个只匹配少量文档的简单查询语句在百万级文档中的查询效率会与一条经过缓存的过滤语句旗鼓相当,甚至略占上风。但是一般情况下,一条经过缓存的过滤查询要远胜一条查询语句的执行效率。
以后博客中提到的查询就是在Query查询上下文,过滤就是指filter过滤器上下文。
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-filter-context.html