转载请出自出处:http://eksliang.iteye.com/blog/2100461
1. ----------------------------------------------描述
我们经常使用搜索引擎,比如在baidu 搜索 spring ,会出现如下结果,结果中与关键字匹配的地方是红色显示与其他内容区别开来。
2.----------------------------------------------solr对高亮的支持
solr 默认已经配置了highlight 组件。通常我出只需要这样请求,我还是从solr的管理页面截图吧!
3.----------------------------------------------参数说明
- hl.fl: 用空格或逗号隔开的字段列表。要启用某个字段的highlight功能,就得保证该字段在schema中是stored。如果该参数未被给出,那么就会高亮默认字段 standard handler会用df参数,dismax字段用qf参数。你可以使用星号去方便的高亮所有字段。如果你使用了通配符,那么要考虑启用hl.requiredFieldMatch选项。
- hl.requireFieldMatch: 如果置为true,除非用hl.fl指定了该字段,查询结果才会被高亮。它的默认值是false。
- hl.usePhraseHighlighter: 如果一个查询中含有短语(引号框起来的)那么会保证一定要完全匹配短语的才会被高亮。
- hl.highlightMultiTerm :如果使用通配符和模糊搜索,那么会确保与通配符匹配的term会高亮。默认为false,同时hl.usePhraseHighlighter要为true。
- hl.fragsize: 返回的最大字符数。默认是100.如果为0,那么该字段不会被fragmented且整个字段的值会被返回。
常用的就这几个:参数详细地址http://wiki.apache.org/solr/HighlightingParameters/
4.----------------------------------------------solrj对高亮的支持
public class HighlightTest { public static void main(String[] args) throws SolrServerException { ServiceFacetory facet= ServiceFacetory.getInstance("userManager","http://192.168.238.133:8080//solr"); SolrSupport s= facet.getSolrSupport(); //这里就是得到HttpSolrServer,你也可以自己封装 HttpSolrServer service= s.getHttpSolrServer(); SolrQuery query = new SolrQuery(); query.setQuery("color:黑色"); query.setHighlight(true); //开启高亮 query.setHighlightFragsize(10); //返回的字符个数 query.setHighlightRequireFieldMatch(true); query.setHighlightSimplePost("<aa>"); //前缀 query.setHighlightSimplePre("</aa>"); //后缀 query.setParam("hl.fl", "color"); //高亮字段 QueryResponse req = service.query(query); SolrDocumentList list= req.getResults(); Map<String, Map<String, List<String>>> map=req.getHighlighting(); for (SolrDocument doc : list) { System.out.println(map.get(doc.getFieldValue("id").toString())); } } }
5. ----------------------------------------------使用高亮时需要注意的地方
1.对于multiValued=true的字段不要设计高亮显示
为什么?因为solr对于这个字段里面的多个值只会返回匹配高亮的那个值;如下:
从上图中可以看出,remark字段是设计成multiValued=true,而且它里面有多个值,当我们查询“remark=黑色”时,下面的高亮确只返回了当前查询的值;这样如果把这个高亮部分在页面去展示就没有任何意义了!
2.高亮时记得你的schema.xml文件中要配主键(<uniqueKey>id</uniqueKey>)
为什么?
因为solr对高亮的设计是,高亮部分跟结果集部分是分开返回的,如果没有配主键,那么高亮部分返回的结果是这样的,如下图所示,可以看出高亮部分没有带主键,这个时候,你就与上面的结果集匹配不上,那么这样的高亮就没有任何意义,因为不能够确定高亮的是哪条记录。
3.对于如下应用场景的解决方案
例如:solr里面有多个字段例如:title(标题)、context(内容),我想对这两个字段做检索,但是通过利用如下去实现,
<copyField source=" title " dest="context_title"/> <copyField source=" context" dest="context_title"/>,最后通过context_title这个字段做全文检索(玩过solr都知道如上这种配置,context_title字段就必须配置成multiValued=true),这个时候,对这样的字段去高亮就会出现问题
解决方案:直接查询title,context让这两列返回高亮,然后在代码里面让这两列进行拼接,问题解决!
6.----------------------------------------------下面是我们为solr高亮设计接口模型,及其实现:
因为solr的结果集跟高亮是分开返回的,而且高亮是不会排序的,所以我把我的接口设计成,将高亮部分替换结果集的部分,如下图所示
例如:在地址栏请求
http://192.168.238.133/:8080/search/highlightPageQuery.htm?src={'core':'userManager',
'pageNo':1,'pageSize':10,
'params':['0color:黑色'],
'columns':['id','color','remarks'],
'highlighFields':['color','remark']
}
那么返回
{"data":[ {"id":123,"remarks":"黑色 黄色 蓝色 紫色 ","color":"<em>黑色</em> 黄色 蓝色 紫色 <em>黑色</em> 黄色 蓝色 紫色 "}, {"id":212,"remarks":"黑色 黄色 蓝色 紫色 ","color":"蓝色 绿色 白色 <em>黑色</em> 黄色 蓝色 紫色"}], "pageNo":1, "pageSize":10, "totalRecords":2 }
相关推荐
第01讲 solr5简介第02讲 solr5之Schema第03讲 solr5之Solrconfig第04讲 solr5单机安装与配置第05讲 solrj基础(一)第06讲 solrj基础(二)第07讲 solrj之SolrBean第08讲 solrj语法详解第09讲 Solrj之Multicore查询第10...
《mmseg4j-solr-2.1.0-with-mmseg4j-core.zip:Solr4.8与mmseg4j分词器的集成详解》 在信息检索和文本挖掘领域,搜索引擎扮演着至关重要的角色,而Apache Solr作为一款高效、可扩展的开源全文搜索平台,被广泛应用...
这是一款适用于Java的中文分词库,它能够有效地对中文文本进行分词处理,提高Solr对中文查询的准确性和效率。在Solr中,mmseg4j 可以通过添加相应的 jar 包来集成,以便对中文内容进行索引和搜索。 配置 Solr 5.4 ...
通过以上步骤,我们成功搭建了一个基于Solr 5.3.1版本的搜索引擎服务器,并且配置了基本的数据导入和查询功能。此外,还介绍了如何配置中文分词器以及定时更新索引等功能,这对于构建具有高性能搜索能力的应用系统来...
第01讲 solr5简介第02讲 solr5之Schema第03讲 solr5之Solrconfig第04讲 solr5单机安装与配置第05讲 solrj基础(一)第06讲 solrj基础(二)第07讲 solrj之SolrBean第08讲 solrj语法详解第09讲 Solrj之Multicore查询第10...
- **查询优化**:利用Solr的查询过滤器(Filter Queries)和查询结果缓存,减少不必要的文档扫描,提高查询效率。 - **数据预处理**:在索引阶段,预先计算join结果并存储在Solr文档中,查询时直接读取,避免运行时...
2. **SolrJ**:Java客户端库,允许开发者通过代码与Solr服务器交互,执行索引操作和查询请求。 3. **命令行工具**:如`post.jar`,用于批量导入数据到Solr索引。 4. **API支持**:Solr提供了RESTful API,支持通过...
Solr的特点包括:高度可扩展性、分布式搜索能力、灵活的数据索引和查询机制等。 #### 二、Solr的安装与配置 ##### 2.1 安装准备 在进行Solr的安装之前,需要准备以下环境: - **操作系统**:推荐使用Linux系统,如...
- 数据的查询机制和查询解析器 6. **许可与版权信息** - Apache License, Version 2.0 是 Solr 源代码的授权协议 - 该许可协议对用户使用代码的限制 - 如何获取授权协议的副本 7. **商标和品牌指南** - ...
Solr 是一个基于 Lucene 的开源搜索引擎,提供了一个分布式、可扩展、易用且功能强大的全文...总的来说,Solr 的安装和配置是一个涉及多个步骤的过程,但遵循上述指南,你应该能够成功搭建起一个基本的 Solr 搜索环境。
在 Solr 8 中,为了确保系统的安全性和数据的隐私性,配置用户登录验证是非常重要的步骤。本文将详细介绍如何对手动配置 Solr 8 的用户登录验证。 首先,我们需要了解 Solr 的安全组件——Jetty 容器。Solr 默认...
- 在`solr\WEB-INF\web.xml`文件中配置Solr的HOME目录,确保Solr知道去哪里查找其配置文件和数据。 **2.7 测试Solr** - **2.7.1 JDK版本要求**: Solr 6.x版本要求JDK 8或以上版本。 - **2.7.2 启动Tomcat**: 使用...
将 Solr 集成与 MySQL,可以实现对 MySQL 数据库中的数据进行实时索引和快速检索,从而提升数据查询效率。下面我们将详细介绍如何进行 Solr 6.0 与 MySQL 的集成配置。 **1. 安装与配置 Solr** 首先,你需要下载并...
第01讲 solr5简介第02讲 solr5之Schema第03讲 solr5之Solrconfig第04讲 solr5单机安装与配置第05讲 solrj基础(一)第06讲 solrj基础(二)第07讲 solrj之SolrBean第08讲 solrj语法详解第09讲 Solrj之Multicore查询第10...
第01讲 solr5简介第02讲 solr5之Schema第03讲 solr5之Solrconfig第04讲 solr5单机安装与配置第05讲 solrj基础(一)第06讲 solrj基础(二)第07讲 solrj之SolrBean第08讲 solrj语法详解第09讲 Solrj之Multicore查询第10...
1. **solrconfig.xml**: 这是Solr的核心配置文件,定义了索引和查询的处理方式。例如,它包含了索引写入策略(如实时添加文档)、缓存设置(如查询结果缓存和文档过滤器缓存)、请求处理器的配置以及搜索组件的定义...
2. **配置文件**:`solrconfig.xml` 是 Solr 的核心配置文件,用于定义索引、查询和其他操作的行为。`schema.xml` 用于定义字段类型和字段,它是 Solr 索引数据的基础。 3. **启动 Solr**:通过运行 `bin/solr ...
通过配置不同的字段类型和查询解析器,可以满足各种复杂的搜索需求。此外,SolrCloud模式还允许在集群环境中实现高可用性和水平扩展。 总的来说,配置Solr涉及JDK、Tomcat的安装与环境变量设置,以及Solr自身的部署...
Solr4.4.0是Solr的一个版本号,本篇文章将介绍如何安装和配置Solr4.4.0来搭建一个基本的搜索服务。 安装和配置Solr4.4.0通常包括以下步骤: 第一步,下载Solr4.4.0安装包。可以通过访问Solr的官方网站下载相应的...