李煜林
Java中如何实现ElasticSearch高亮搜索?
李煜林 爱记不记的记忆碎片
>>>>>>>>>>
问
Java中如何实现ElasticSearch高亮搜索?
答
Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。在项目上要实现快速、高效的全文检索,基本上绝大多数都会选择Elasticsearch。我们经常见到在应用中输入搜索关键字,搜索结果中会高亮显示输入的关键字,那么这是怎么实现的呢?
其实ES自身就支持高亮查询功能,ES自身在执行查询时增加一个新的增加一个新的 highlight 参数:
当执行该查询时,返回结果与之前一样,与此同时结果中还多了一个叫做 highlight 的部分。这个部分包含了 about 属性匹配的文本片段,并以 HTML 标签 <em></em> 封装:
我们也可以自定义高亮样式,只要在 highlight 参数中添加自己想要的标签样式:
这样查询返回结果中<em>标签便会更换为自定义标签样式。
但是这是手动查询ES的实现。在Java开发中我们一般使用客户端API来访问ES,那么这又该如何实现呢?
其实很简单,当我们在项目中引入ES服务和要使用的客户端API后,我们只需查看API文档,按照API文档给的调用方式即可实现。我们以JestClient API为例。
在JestClient 中我们只需要在查询时设置高亮参数然后查询即可,如下
about: I love to go<b style='color:red'> rock<b style='color:red'> climbing</b>.
这样前端展示取值后显示即可
本文只是以JestClient为例,还有其他许多方式都可以实现Es的高亮查询,例如RestHighLevelClient、elasticsearchTemplate等,但基本原理都是一样,都是通过在查询时添加高亮参数实现。
附:高亮参数
E.N.D
作者:李煜林
审核:梁 空 超
编辑:朱思聪