Search your data
这里有两个比较有用的参数需要注意一下
- Search timeout:设置每个分片的搜索超时时间。从集群级别可以通过- search.default_search_timeout来设置超时时间。如果在- search.default_search_timeout设置的时间段内未完成搜索请求,就会取消该任务。- search.default_search_timeout的默认值为- -1,表示无超时时间限制。
GET /my-index-000001/_search
{"timeout": "2s","query": {"match": {"user.id": "kimchy"}}
}
- track_total_hits:设置搜索过程中匹配文档的数量。如果需要匹配所有文档,- track_total_hits设置为- true,如果需要匹配的文档为 1000 条,则- track_total_hits设置为- 1000。数据量大时- track_total_hits设置为- true会拖慢查询速度。
GET my-index-000001/_search
{"track_total_hits": true,"query": {"match" : {"user.id" : "elkbee"}}
}
注意:
 这强调一下 Response 中的 took。took 代表处理该请求所耗费的毫秒数。从节点收到查询后开始,到返回客户端之前,包括在线程池中等待、在集群中执行分布式搜索和收集、排序所有结果所花费的时间。
一、Collapse search results
没看懂有啥用呢。。。考完试再研究
二、Filter search results
- post_filter:- filter过滤会将符合条件的文档留下,之后进行 聚合,而- post_filter是在聚合后过滤结果,不影响聚合结果。
# 创建索引,添加数据
PUT /shirts
{"mappings": {"properties": {"brand": { "type": "keyword"},"color": { "type": "keyword"},"model": { "type": "keyword"}}}
}POST /shirts/_bulk
{"index":{}}
{"brand": "gucci", "color": "red", "model": "slim"}
{"index":{}}
{"brand": "gucci", "color": "back", "model": "slim"}
{"index":{}}
{"brand": "gucci", "color": "back", "model": "large"}
直接使用 filter
GET /shirts/_search
{"query": {"bool": {"filter": [{ "term": { "color": "red"   }},{ "term": { "brand": "gucci" }}]}},"aggs": {"models": {"terms": { "field": "model" } }}
}

 使用 post_filter
GET /shirts/_search
{"post_filter": {"bool": {"filter": [{ "term": { "color": "red"   }},{ "term": { "brand": "gucci" }}]}}, "aggs": {"models": {"terms": { "field": "model" } }}
}
- rescore:对每个分片的查询结果的前- window_size个文档重新评分。
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}}
}