本文参考官方提供api提炼出来的html
https://www.elastic.co/guide/en/elasticsearch/reference/current/search.htmlapi
Compound Queries缓存
复合查询包装其余复合或叶子查询,以组合其结果和分数,更改其行为,或从查询切换到筛选器上下文。app
Constant Score Querydom
一个包装另外一个查询的查询,只返回一个等于筛选器中每一个文档的查询提高的常量分数。elasticsearch
GET /_search { "query": { "constant_score" : { "filter" : { "term" : { "user" : "kimchy"} }, "boost" : 1.2 } } }
Bool Queryide
用于组合多个叶或化合物查询子句,做为默认查询 must
,should
,must_not
,或filter
条款。在must
和should
条款有他们的分数相结合-更匹配的条款,更好的-而must_not
和filter
条款在过滤器上下文中执行。函数
发生 | 描述 |
---|---|
|
子句(查询)必须出如今匹配的文档中,并有助于得分。this |
|
子句(查询)必须出如今匹配的文档中。可是不一样于 |
|
子句(查询)应出如今匹配的文档中。若是 |
|
子句(查询)不得出如今匹配的文档中。子句在过滤器上下文中执行,这意味着忽略评分并考虑使用子句进行高速缓存。因为忽略了评分,所以 |
GET _search { "query": { "bool": { "must": { "match_all": {} }, "filter": { "term": { "status": "active" } } } } }
等价
GET _search { "query": { "constant_score": { "filter": { "term": { "status": "active" } } } } }
Dis Max Query
一个接受多个查询的查询,并返回与任何查询子句匹配的任何文档。当bool
查询组合来自全部匹配查询的分数时,dis_max
查询使用单个最佳匹配查询子句的分数。
GET /_search { "query": { "dis_max" : { "tie_breaker" : 0.7, "boost" : 1.2, "queries" : [ { "term" : { "age" : 34 } }, { "term" : { "age" : 35 } } ] } } }
Function Score Query
function_score
容许你修改的由查询检索文档的分数。
要使用function_score
,用户必须定义查询和一个或多个函数,这些函数计算查询返回的每一个文档的新分数。
GET /_search { "query": { "function_score": { "query": { "match_all": {} }, "boost": "5", "random_score": {}, "boost_mode":"multiply" } } }
GET /_search { "query": { "function_score": { "query": { "match_all": {} }, "boost": "5", "functions": [ { "filter": { "match": { "test": "bar" } }, "random_score": {}, "weight": 23 }, { "filter": { "match": { "test": "cat" } }, "weight": 42 } ], "max_boost": 42, "score_mode": "max", "boost_mode": "multiply", "min_score" : 42 } } }
每一个文档都由定义的函数评分。该参数 score_mode
指定计算得分的组合方式:
|
分数乘以(默认) |
|
得分总和 |
|
分数是平均的 |
|
应用具备匹配过滤器的第一个函数 |
|
使用最高分 |
|
使用最低分数 |
该参数boost_mode
定义:
|
查询得分和功能得分相乘(默认) |
|
仅使用功能得分,忽略查询得分 |
|
查询得分和功能得分被添加 |
|
平均 |
|
最大查询分数和功能分数 |
|
最小查询得分和功能得分 |
script_score
函数容许您使用脚本表达式包装另外一个查询并使用从doc中其余数字字段值派生的计算来自定义它的评分。
GET /_search { "query": { "function_score": { "query": { "match": { "message": "elasticsearch" } }, "script_score" : { "script" : { "source": "Math.log(2 + doc['likes'].value)" } } } } }
field_value_factor
功能容许您使用文档中的字段来影响分数。它与使用该script_score
函数相似,但它避免了脚本的开销。若是在多值字段上使用,则仅在计算中使用该字段的第一个值。
GET /_search { "query": { "function_score": { "field_value_factor": { "field": "likes", "factor": 1.2, "modifier": "sqrt", "missing": 1 } } } }
这将转化为如下评分公式:
sqrt(1.2 * doc['likes'].value)
该功能有多种选择field_value_factor
:
|
要从文档中提取的字段。 |
|
将字段值乘以的可选因子,默认为 |
|
修改适用于该字段的值,能够是一个: |
修改 | 含义 |
---|---|
|
不要对字段值应用任何乘数 |
|
取字段值的经常使用对数 |
|
将1添加到字段值并采用经常使用对数 |
|
将2添加到字段值并采用经常使用对数 |
|
取字段值的天然对数 |
|
将1添加到字段值并采用天然对数 |
|
将2添加到字段值并采用天然对数 |
|
平方字段值(乘以它本身) |
|
取字段值的平方根 |
|
报答字段值,同 |
missing
若是文档没有该字段,则使用的值。修饰符和因子仍然应用于它,就像从文档中读取同样。
Boosting Query
返回与positive
查询匹配的文档,但减小与negative
查询匹配的文档的分数。
GET /_search { "query": { "boosting" : { "positive" : { "term" : { "field1" : "value1" } }, "negative" : { "term" : { "field2" : "value2" } }, "negative_boost" : 0.2 } } }
Joining Queries
Nested Query
嵌套查询容许查询嵌套对象/文档
GET /_search { "query": { "nested" : { "path" : "obj1", "score_mode" : "avg", "query" : { "bool" : { "must" : [ { "match" : {"obj1.name" : "blue"} }, { "range" : {"obj1.count" : {"gt" : 5}} } ] } } } } }
Has Child Query
has_child
过滤器接受查询和子类型针对其运行,并致使具备子文档与查询匹配的父文件。
GET /_search { "query": { "has_child" : { "type" : "blog_tag", "query" : { "term" : { "tag" : "something" } } } } }
has_child
也有得分支持。支持的得分模式min
,max
,sum
,avg
或none
。默认值为 none
and,产生与先前版本相同的行为。若是将得分模式设置为除了以外的其余值none
,则将全部匹配的子文档的得分聚合到关联的父文档中。
GET /_search { "query": { "has_child" : { "type" : "blog_tag", "score_mode" : "min", "query" : { "term" : { "tag" : "something" } } } } }
Has Parent Query
该has_parent
查询接受查询和父类型。查询在父文档空间中执行,该父文档空间由父类型指定。此查询返回关联父项已匹配的子文档。对于其他has_parent
查询具备相同的选项,其工做方式与has_child
查询相同。
GET /_search { "query": { "has_parent" : { "parent_type" : "blog", "score" : true, "query" : { "term" : { "tag" : "something" } } } } }
Parent Id Query
parent_id
查询可用于查找属于特定父级的子文档。
GET /my_index/_search { "query": { "parent_id": { "type": "my_child", "id": "1" } } }
此查询有两个必需参数:
|
该子类型名称,在指定的 |
|
父文档的ID。 |
|
设置为 |