跳到主要内容

查询参数 search body

From/Size

可以使用from和size参数对结果进行分页,from参数定义要获取的第一个结果的偏移量。size参数指定返回的最大文档数。

GET /_search
{
"from" : 0, "size" : 10,
"query" : {
"term" : { "user" : "kimchy" }
}
}

from + size总和不能超过10000

Sort 排序

允许您在特定字段上添加一个或多个排序,每种类型也可以反转。

GET /my_index/_search
{
"sort" : [
{ "post_date" : {"order" : "asc"}},
"user",
{ "name" : "desc" },
{ "age" : "desc" },
"_score"
],
"query" : {
"term" : { "user" : "kimchy" }
}
}
参数说明
asc按升序排序
desc按降序排序

Source filtering 源字段过滤

通过_source控制字段展示。

  1. 关闭_source
GET /_search
{
"_source": false,
"query" : {
"term" : { "user" : "kimchy" }
}
}
  1. 指定通配符只看部分字段
GET /_search
{
"_source": "obj.*",
"query" : {
"term" : { "user" : "kimchy" }
}
}
  1. 数组方式
GET /_search
{
"_source": [ "obj1.*", "obj2.*" ],
"query" : {
"term" : { "user" : "kimchy" }
}
}
  1. 包含与排除
GET /_search
{
"_source": {
"includes": [ "obj1.*", "obj2.*" ],
"excludes": [ "*.description" ]
},
"query" : {
"term" : { "user" : "kimchy" }
}
}

Doc value Fields

允许为每次命中返回字段的doc_value,例如:

GET /_search
{
"query" : {
"match_all": {}
},
"docvalue_fields" : [
{
"field": "my_ip_field",
"format": "use_field_mapping"
},
{
"field": "my_date_field",
"format": "epoch_millis"
}
]
}

同时也支持通配符模式

GET /_search
{
"query" : {
"match_all": {}
},
"docvalue_fields" : [
{
"field": "*field",
"format": "use_field_mapping"
}
]
}

Post filter 后置过滤

搜索结果过滤

GET /shirts/_search
{
"query": {
...
},
"aggs": {
...
},
"post_filter": {
"term": { "color": "red" }
}
}

Rescoring 二次算分

二次算分:对query和post_filter阶段返回的Top-K结果执行第二次查询,原始查询和二次查询的分数线性组合,以生成每个文档的最终_score。

POST /_search
{
"query" : {
"match" : {
"message" : {
"operator" : "or",
"query" : "the quick brown"
}
}
},
"rescore" : {
"window_size" : 50,
"query" : {
"rescore_query" : {
"match_phrase" : {
"message" : {
"query" : "the quick brown",
"slop" : 2
}
}
},
"query_weight" : 0.7,
"rescore_query_weight" : 1.2
}
}
}

可以使用score_mode控制分数的组合方式:

Score Mode描述
total添加原始分数和重新搜索查询分数。默认值。
multiply将原始分数乘以重新搜索查询分数。用于函数查询重新搜索。
avg平均原始分数和重新搜索查询分数。
max取原始分数和重新搜索查询分数的最大值。
min取原始分数和重新搜索查询分数的最小值。

乘法实例

POST /_search
{
"query" : {
"match" : {
"message" : {
"operator" : "or",
"query" : "the quick brown"
}
}
},
"rescore" : [ {
"window_size" : 100,
"query" : {
"rescore_query" : {
"match_phrase" : {
"message" : {
"query" : "the quick brown",
"slop" : 2
}
}
},
"query_weight" : 0.7,
"rescore_query_weight" : 1.2
}
}, {
"window_size" : 10,
"query" : {
"score_mode": "multiply",
"rescore_query" : {
"function_score" : {
"script_score": {
"script": {
"source": "Math.log10(doc.likes.value + 2)"
}
}
}
}
}
} ]
}

Explain 解释

解释查询的得分计算方式。

GET /_search
{
"explain": true,
"query" : {
"term" : { "user" : "kimchy" }
}
}

Profile 测量

Profile 提供了有关搜索请求中各个组件执行的详细耗时信息

注意,Profile API不测量网络延迟、搜索获取阶段花费的时间、请求在队列中花费的时间或在协调节点上合并shard响应时花费的时间。

GET /twitter/_search
{
"profile": true,
"query" : {
"match" : { "message" : "some number" }
}
}

Highlighting 高亮

示例1:指定content字段高亮

GET /_search
{
"query" : {
"match": { "content": "kimchy" }
},
"highlight" : {
"fields" : {
"content" : {}
}
}
}

示例2:所有字段高亮,设置tag。

GET /_search
{
"query" : {
"match": { "user": "kimchy" }
},
"highlight" : {
"pre_tags" : ["<tag1>"],
"post_tags" : ["</tag1>"],
"fields" : {
"_all" : {}
}
}
}

Elasticsearch支持三种高亮显示:: unified, plain, fvh(快速矢量高亮显示)更多示例