0


Elasticsearch 核心技术(九):搜索结果处理(分页、排序、指定返回字段、去重、高亮显示)

在这里插入图片描述

❤️ 博客主页:水滴技术
🚀 支持水滴:点赞👍 + 收藏⭐ + 留言💬
🌸 订阅专栏:大数据核心技术从入门到精通

文章目录


大家好,我是水滴~~

本篇主要讲述 Elasticsearch 关于搜索结果的处理,主要内容有:分页查询、结果排序、指定返回字段、去重、高亮显示等。

一、分页

Elasticsearch 对所有查询都进行了分页,默认返回前 10 条数据。如果想要查询更多的数据,就需要使用分页参数了。Elasticsearch 提供了两个参数

from

size

来控制分页结果。

  • from 表示从第几条数据开始查询,默认值为 0
  • size 表示返回数据量大小,默认值为 10

注:分页也有一定的限制,不能查询

from

+

size

超过 10000 的数据。

1.1 示例:查询第 1 页,每页大小为 5

GET/mt_product/_search
{"query":{"match_all":{}},"from":0,"size":5}

查询结果:

{"took":1,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value":12,"relation":"eq"},"max_score":1.0,"hits":[{"_index":"mt_product","_type":"_doc","_id":"1","_score":1.0,"_source":{"id":1,"name":"招牌海苔单人餐","tags":["寿司"],"price":9.9,"sales":1000,"score":4.7,"store_id":1,"store_name":"M多寿司","create_time":"2023-01-18 08:01:00"}},{"_index":"mt_product","_type":"_doc","_id":"2","_score":1.0,"_source":{"id":2,"name":"1-2人招牌双拼套餐","tags":["寿司"],"price":18.9,"sales":1200,"score":4.8,"store_id":1,"store_name":"M多寿司","create_time":"2023-01-18 08:02:00"}},{"_index":"mt_product","_type":"_doc","_id":"3","_score":1.0,"_source":{"id":3,"name":"三文鱼寿司","tags":["寿司,鱼肉"],"price":16.9,"sales":820,"score":4.9,"store_id":2,"store_name":"爱食寿司","create_time":"2023-01-18 08:03:00"}},{"_index":"mt_product","_type":"_doc","_id":"4","_score":1.0,"_source":{"id":4,"name":"极上全品寿司套餐","tags":["寿司"],"price":25,"sales":1500,"score":4.6,"store_id":2,"store_name":"爱食寿司","create_time":"2023-01-18 08:04:00"}},{"_index":"mt_product","_type":"_doc","_id":"5","_score":1.0,"_source":{"id":5,"name":"劲脆鸡腿汉堡","tags":["汉堡,鸡肉"],"price":21.5,"sales":200,"score":4.5,"store_id":3,"store_name":"肯德基","create_time":"2023-01-18 08:05:00"}}]}}

1.2 示例:查询第 2 页,每页大小为 5

GET/mt_product/_search
{"query":{"match_all":{}},"from":5,"size":5}

查询结果:

{"took":0,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value":12,"relation":"eq"},"max_score":1.0,"hits":[{"_index":"mt_product","_type":"_doc","_id":"6","_score":1.0,"_source":{"id":6,"name":"香辣鸡腿汉堡","tags":["汉堡,鸡肉"],"price":21.5,"sales":98,"score":4.4,"store_id":3,"store_name":"肯德基","create_time":"2023-01-18 08:06:00"}},{"_index":"mt_product","_type":"_doc","_id":"7","_score":1.0,"_source":{"id":7,"name":"20块香辣鸡翅","tags":["鸡肉"],"price":99,"sales":5,"score":4.8,"store_id":3,"store_name":"肯德基","create_time":"2023-01-18 08:07:00"}},{"_index":"mt_product","_type":"_doc","_id":"8","_score":1.0,"_source":{"id":8,"name":"3层芝士年堡套餐","tags":["汉堡"],"price":29,"sales":4000,"score":4.9,"store_id":4,"store_name":"汉堡王","create_time":"2023-01-18 08:08:00"}},{"_index":"mt_product","_type":"_doc","_id":"9","_score":1.0,"_source":{"id":9,"name":"霸道小酥鸡+薯霸王","tags":["汉堡,鸡肉"],"price":19,"sales":300,"score":4.2,"store_id":4,"store_name":"汉堡王","create_time":"2023-01-18 08:09:00"}},{"_index":"mt_product","_type":"_doc","_id":"10","_score":1.0,"_source":{"id":10,"name":"双层原味板烧鸡腿麦满分四件套","tags":["汉堡,鸡肉"],"price":29,"sales":3000,"score":4.8,"store_id":5,"store_name":"麦当劳","create_time":"2023-01-18 08:10:00"}}]}}

1.3 示例:查询第 3 页,每页大小为 5

GET/mt_product/_search
{"query":{"match_all":{}},"from":10,"size":5}

查询结果:

{"took":0,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value":12,"relation":"eq"},"max_score":1.0,"hits":[{"_index":"mt_product","_type":"_doc","_id":"11","_score":1.0,"_source":{"id":11,"name":"火腿扒麦满分组合","tags":["汉堡"],"price":8,"sales":100000,"score":4.9,"store_id":5,"store_name":"麦当劳","create_time":"2023-01-18 08:11:00"}},{"_index":"mt_product","_type":"_doc","_id":"12","_score":1.0,"_source":{"id":12,"name":"原味板烧鸡腿麦满组件","tags":["汉堡,鸡肉"],"price":9.9,"sales":140000,"score":4.9,"store_id":5,"store_name":"麦当劳","create_time":"2023-01-18 08:12:00"}}]}}

二、排序

Elasticsearch 支持按指定的字段进行排序,使用

sort

参数来设置排序,排序字段也可以是多个。排序选项中正序使用

asc

,倒序使用

desc

2.1 示例:按 id 正序排序

GET/mt_product/_search
{"query":{"match_all":{}},"size":3,"sort":[{"id":{"order":"asc"}}]}

查询结果:

{"took":0,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value":12,"relation":"eq"},"max_score":null,"hits":[{"_index":"mt_product","_type":"_doc","_id":"1","_score":null,"_source":{"id":1,"name":"招牌海苔单人餐","tags":["寿司"],"price":9.9,"sales":1000,"score":4.7,"store_id":1,"store_name":"M多寿司","create_time":"2023-01-18 08:01:00"},"sort":[1]},{"_index":"mt_product","_type":"_doc","_id":"2","_score":null,"_source":{"id":2,"name":"1-2人招牌双拼套餐","tags":["寿司"],"price":18.9,"sales":1200,"score":4.8,"store_id":1,"store_name":"M多寿司","create_time":"2023-01-18 08:02:00"},"sort":[2]},{"_index":"mt_product","_type":"_doc","_id":"3","_score":null,"_source":{"id":3,"name":"三文鱼寿司","tags":["寿司,鱼肉"],"price":16.9,"sales":820,"score":4.9,"store_id":2,"store_name":"爱食寿司","create_time":"2023-01-18 08:03:00"},"sort":[3]}]}}

2.2 示例:按 id 倒序排序

GET/mt_product/_search
{"query":{"match_all":{}},"size":3,"sort":[{"id":{"order":"desc"}}]}

查询结果:

{"took":0,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value":12,"relation":"eq"},"max_score":null,"hits":[{"_index":"mt_product","_type":"_doc","_id":"12","_score":null,"_source":{"id":12,"name":"原味板烧鸡腿麦满组件","tags":["汉堡,鸡肉"],"price":9.9,"sales":140000,"score":4.9,"store_id":5,"store_name":"麦当劳","create_time":"2023-01-18 08:12:00"},"sort":[12]},{"_index":"mt_product","_type":"_doc","_id":"11","_score":null,"_source":{"id":11,"name":"火腿扒麦满分组合","tags":["汉堡"],"price":8,"sales":100000,"score":4.9,"store_id":5,"store_name":"麦当劳","create_time":"2023-01-18 08:11:00"},"sort":[11]},{"_index":"mt_product","_type":"_doc","_id":"10","_score":null,"_source":{"id":10,"name":"双层原味板烧鸡腿麦满分四件套","tags":["汉堡,鸡肉"],"price":29,"sales":3000,"score":4.8,"store_id":5,"store_name":"麦当劳","create_time":"2023-01-18 08:10:00"},"sort":[10]}]}}

三、指定返回字段

在实际的查询中,我们通过是有选择地返回我们想要的字段,这样会节省带宽和内存的使用。Elasticsearch 通过两个参数来指定返回字段:

  • fields:用来指定返回的字段
  • _source:将 _source 设为 false,表示不会返回所有完整文档数据(文档数据存在 _source 中)。

3.1 示例:只返回 id 和 name 字段

GET/mt_product/_search
{"query":{"match_all":{}},"size":3,"fields":["id","name"],"_source":false}

查询结果:

{"took":0,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value":12,"relation":"eq"},"max_score":1.0,"hits":[{"_index":"mt_product","_type":"_doc","_id":"1","_score":1.0,"fields":{"name":["招牌海苔单人餐"],"id":[1]}},{"_index":"mt_product","_type":"_doc","_id":"2","_score":1.0,"fields":{"name":["1-2人招牌双拼套餐"],"id":[2]}},{"_index":"mt_product","_type":"_doc","_id":"3","_score":1.0,"fields":{"name":["三文鱼寿司"],"id":[3]}}]}}

四、去重

当我们的索引中存在重复数据时,可以将其去重。Elasticsearch 通过

collapse

参数来实现去重,去重时需要指定字段。

4.1 示例:根据 store_id 字段去重

GET/mt_product/_search
{"query":{"match_all":{}},"collapse":{"field":"store_id"}}

响应结果:

{"took":0,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value":12,"relation":"eq"},"max_score":null,"hits":[{"_index":"mt_product","_type":"_doc","_id":"1","_score":1.0,"_source":{"id":1,"name":"招牌海苔单人餐","tags":["寿司"],"price":9.9,"sales":1000,"score":4.7,"store_id":1,"store_name":"M多寿司","create_time":"2023-01-18 08:01:00"},"fields":{"store_id":["1"]}},{"_index":"mt_product","_type":"_doc","_id":"3","_score":1.0,"_source":{"id":3,"name":"三文鱼寿司","tags":["寿司,鱼肉"],"price":16.9,"sales":820,"score":4.9,"store_id":2,"store_name":"爱食寿司","create_time":"2023-01-18 08:03:00"},"fields":{"store_id":["2"]}},{"_index":"mt_product","_type":"_doc","_id":"5","_score":1.0,"_source":{"id":5,"name":"劲脆鸡腿汉堡","tags":["汉堡,鸡肉"],"price":21.5,"sales":200,"score":4.5,"store_id":3,"store_name":"肯德基","create_time":"2023-01-18 08:05:00"},"fields":{"store_id":["3"]}},{"_index":"mt_product","_type":"_doc","_id":"8","_score":1.0,"_source":{"id":8,"name":"3层芝士年堡套餐","tags":["汉堡"],"price":29,"sales":4000,"score":4.9,"store_id":4,"store_name":"汉堡王","create_time":"2023-01-18 08:08:00"},"fields":{"store_id":["4"]}},{"_index":"mt_product","_type":"_doc","_id":"10","_score":1.0,"_source":{"id":10,"name":"双层原味板烧鸡腿麦满分四件套","tags":["汉堡,鸡肉"],"price":29,"sales":3000,"score":4.8,"store_id":5,"store_name":"麦当劳","create_time":"2023-01-18 08:10:00"},"fields":{"store_id":["5"]}}]}}

五、高亮显示

Elasticsearch 可以将搜索关键字做高亮显示,可以指定高亮显示的字段,会在响应结果中对关键字加

<em>

标签,便于前端特殊处理。

5.1 示例:将 name 字段做高亮显示

GET/mt_product/_search
{"query":{"multi_match":{"query":"寿司","fields":["name","tag"]}},"highlight":{"fields":{"name":{}}}}

查询结果:

{"took":1,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value":2,"relation":"eq"},"max_score":1.7955686,"hits":[{"_index":"mt_product","_type":"_doc","_id":"3","_score":1.7955686,"_source":{"id":3,"name":"三文鱼寿司","tags":["寿司,鱼肉"],"price":16.9,"sales":820,"score":4.9,"store_id":2,"store_name":"爱食寿司","create_time":"2023-01-18 08:03:00"},"highlight":{"name":["三文鱼<em>寿司</em>"]}},{"_index":"mt_product","_type":"_doc","_id":"4","_score":1.6760855,"_source":{"id":4,"name":"极上全品寿司套餐","tags":["寿司"],"price":25,"sales":1500,"score":4.6,"store_id":2,"store_name":"爱食寿司","create_time":"2023-01-18 08:04:00"},"highlight":{"name":["极上全品<em>寿司</em>套餐"]}}]}}

系列文章

🔥 Elasticsearch 核心技术(一):Elasticsearch 安装、配置、运行(Windows 版)
🔥 Elasticsearch 核心技术(二):elasticsearch-head 插件安装和使用
🔥 Elasticsearch 核心技术(三):Kibana 安装、配置、运行(Windows 版)
🔥 Elasticsearch 核心技术(四):索引管理、映射管理、文档管理(REST API)
🔥 Elasticsearch 核心技术(五):常用数据类型详解
🔥 Elasticsearch 核心技术(六):内置的 8 种分词器详解 + 代码示例
🔥 Elasticsearch 核心技术(七):IK 中文分词器的安装、使用、自定义字典
🔥 Elasticsearch 核心技术(八):常用 DSL 查询(全文搜索、精确匹配、布尔查询)

热门专栏

👍 《Python入门核心技术》
👍 《IDEA 教程:从入门到精通》
👍 《Java 教程:从入门到精通》
👍 《MySQL 教程:从入门到精通》
👍 《大数据核心技术从入门到精通》

在这里插入图片描述


本文转载自: https://blog.csdn.net/weixin_67276852/article/details/129935335
版权归原作者 水滴技术 所有, 如有侵权,请联系我们删除。

“Elasticsearch 核心技术(九):搜索结果处理(分页、排序、指定返回字段、去重、高亮显示)”的评论:

还没有评论