Field Collapsing 字段折叠

原文链接 : https://www.elastic.co/guide/en/elasticsearch/reference/5.4/search-request-collapse.html

译文链接 : http://cwiki.apachecn.org/pages/editpage.action?pageId=10813543

贡献者 : 李辰ApacheCNApache中文网

允许基于字段对结果进行折叠。折叠操作是通过每个选择每个折叠键的顶部文档来实现的。例如下面的query获取每个user的最佳tweet并且根据他们的likes数量排序。

  1. GET /twitter/tweet/_search
  1. {
  1. "query": {
  1. "match": {
  1. "message": "elasticsearch"
  1. }
  1. },
  1. "collapse" : {
  1. "field" : "user" ![](/uploads/projects/elasticsearch-doc-zh-v5.4/docs//uploads/projects/elasticsearch-doc-zh-v5.4/docs//uploads/projects/elasticsearch-doc-zh-v5.4/docs/img/eea34d40d69568fde6b7f906a6f54fe4.jpg)
  1. },
  1. "sort": ["likes"], ![](/uploads/projects/elasticsearch-doc-zh-v5.4/docs//uploads/projects/elasticsearch-doc-zh-v5.4/docs//uploads/projects/elasticsearch-doc-zh-v5.4/docs/img/c59efe79ee8017c8cc06a8d1f8762bba.jpg)
  1. "from": 10 ![](/uploads/projects/elasticsearch-doc-zh-v5.4/docs//uploads/projects/elasticsearch-doc-zh-v5.4/docs//uploads/projects/elasticsearch-doc-zh-v5.4/docs/img/bcbebca4d761395d051445589f0f088c.jpg)
  1. }

Field Collapsing 字段折叠 - 图1 使用user字段来折叠结果集


Field Collapsing 字段折叠 - 图2 按照likes数量进行排序获取顶部文档


Field Collapsing 字段折叠 - 图3 定义第一个折叠结果的偏移量

警告: 响应结果中的hits总数表示匹配的文档总数而不是折叠的,去重后的聚合总数是未知的。

用于折叠的字段必须是单值的keywordnumeric字段并开启doc_values(文档值)。

注意: 折叠只应用于顶部文档,而且不会影响聚合。

扩大折叠的显示结果

它也可以通过inner_hits参数来扩大每个折叠的顶部文档。

GET /twitter/tweet/_search

{

  1. "query": {
  2. "match": {
  3. "message": "elasticsearch"
  4. }
  5. },
  6. "collapse" : {
  7. "field" : "user",![](/uploads/projects/elasticsearch-doc-zh-v5.4/docs//uploads/projects/elasticsearch-doc-zh-v5.4/docs//uploads/projects/elasticsearch-doc-zh-v5.4/docs/img/eea34d40d69568fde6b7f906a6f54fe4.jpg)
  8. "inner_hits": {
  9. "name": "last_tweets",![](/uploads/projects/elasticsearch-doc-zh-v5.4/docs//uploads/projects/elasticsearch-doc-zh-v5.4/docs//uploads/projects/elasticsearch-doc-zh-v5.4/docs/img/c59efe79ee8017c8cc06a8d1f8762bba.jpg)
  10. "size": 5,![](/uploads/projects/elasticsearch-doc-zh-v5.4/docs//uploads/projects/elasticsearch-doc-zh-v5.4/docs//uploads/projects/elasticsearch-doc-zh-v5.4/docs/img/bcbebca4d761395d051445589f0f088c.jpg)
  11. "sort": [{ "date": "asc" }]![](/uploads/projects/elasticsearch-doc-zh-v5.4/docs//uploads/projects/elasticsearch-doc-zh-v5.4/docs/img/d7449d755ec194a56f64c0fa7c2ab9b1.jpg)
  12. },
  13. "max_concurrent_group_searches": 4![](/uploads/projects/elasticsearch-doc-zh-v5.4/docs//uploads/projects/elasticsearch-doc-zh-v5.4/docs/img/29fbadd7b713d771c1a9624ae239bc95.jpg)
  14. },
  15. "sort": ["likes"]

}

Field Collapsing 字段折叠 - 图4 使用”user”字段折叠结果集


Field Collapsing 字段折叠 - 图5 name参数用来分割结果响应中的inner_hits


Field Collapsing 字段折叠 - 图6 每个折叠内inner_hits检索到的数目


Field Collapsing 字段折叠 - 图7 每个分组的排序方式


Field Collapsing 字段折叠 - 图8 每个分组内允许检索inner_hits的并发请求数量

查看inner hits 对于所支持的选项的完整列表和响应的格式。

该分组的扩展是通过向响应中返回的每个折叠的命中发送一个额外的查询来完成的。请求参数 max_concurrent_group_searches 可用于控制这个阶段并发搜索的最大数量。 默认值是基于数据节点的数量和默认的搜索线程池大小。

警告: collapse(折叠)不能用于与[scroll](/display/Elasticsearch/Scroll), [rescore](/display/Elasticsearch/Rescoring), [search after](/display/Elasticsearch/Search+After) 一同使用。