一、编写目的
于2018/04/17解决了一个关于Solr查询高亮的问题,期间反复揣摩和尝试,最后形成一套解决思路和理解,特此将其记录下来,以方便后来进行翻阅、查看和配置。
二、功能背景
solr提供了丰富的查询机制,基本查询和高级查询。
基于本项目的环境,会使用基本查询和分组查询,主要适应场景如下:
a. 用户输入关键词后,查询所有栏目类型的匹配记录;
b. 用户选择指定栏目类型及关键词查询,匹配该类型下所有记录。
针对 a 场景情况因为需要查询所有的栏目类型的记录,则会使用分组方式显示,而针对 b 场景情况,仅查询某栏目类型下所有记录就使用Solr的基本查询即可。
此外,需要对匹配的记录实现关键词高亮。在此的难点在于:分组查询之后实现的高亮与基本查询记录高亮仍然是存在一定区别的,分组查询在百度,google等查询无果后决定自己摸索,实现高亮。
三、相关配置
3.1. 为大文本字段去除html标签
因为所存储的文章内容大部分是通过编辑器录入的,这些内容需要渲染于页面中,所以不免内容会存在各式各样的Html标签,但是对于索引的查询如果存在这些标签的干扰,搜索的结果则会大不如意。那么我们的第一步工作就是将这些Html标签去除,则需要配置转换器HTMLStripTransformer,因为该字段大文本字段,则需要配置大文本转换器 ClobTransformer 。配置这些转换器后,需要标明哪些字段需要转换,则需要在该字段上配置 clob="true" stripHTML="true" ,具体配置内容如下:
entity节点属性: transformer="ClobTransformer,HTMLStripTransformer"
entity子节点属性:<field column="TEXT" name="TEXT" clob="true" stripHTML="true" />
3.2. 为查询字段配置IK分词插件
在实现匹配查询时,不同的字段使用不同的查询机制查询能够提升搜索的准确性,可以对需要查询的字段配置分词库。因为项目环境中,我们会对文章的标题和文章内容匹配查询,两个字段也是中文居多,则配置IK分词,用以精确匹配。具体配置内容如下:
<field name="title" type="text_ik" indexed="true" stored="true" required="true" multiValued="false" />
<field name="text" type="text_ik" indexed="true" stored="true" required="true" multiValued="false" />
至此,所需要配置完成。
四、相关代码内容
在实现全文检索的时候我们形成了一系列的工具类和代码,也方便未来搬砖,效仿。
在浏览中需注意的高亮、基本查询和分组查询。
4.1. 代码内容
Solr操作工具类、Solr参数封装类、控制类、快捷搜索框、搜索页
链接:https://pan.baidu.com/s/1-E99KJUvmilsZ7zWrKr6KQ 提取码:5sst
五、参考资料
Solr 6.0 学习(五)solr基本查询和高级查询_solr apache 的高级检索-CSDN博客 Solr基本查询和高级查询
solr如何让全词匹配结果在最前面? - 知乎 solr如何让全词匹配结果在最前面?