文档章节

solr4.8 高亮查询和配置

闪电
 闪电
发布于 2015/05/09 23:30
字数 1106
阅读 38
收藏 1

 

转载请出自出处:http://eksliang.iteye.com/blog/2100461

 

1. ----------------------------------------------描述

       我们经常使用搜索引擎,比如在baidu 搜索 spring ,会出现如下结果,结果中与关键字匹配的地方是红色显示与其他内容区别开来。



 

2.----------------------------------------------solr对高亮的支持

         solr 默认已经配置了highlight 组件。通常我出只需要这样请求,我还是从solr的管理页面截图吧!

 

3.----------------------------------------------参数说明

  1. hl.fl: 用空格或逗号隔开的字段列表。要启用某个字段的highlight功能,就得保证该字段在schema中是stored。如果该参数未被给出,那么就会高亮默认字段 standard handler会用df参数,dismax字段用qf参数。你可以使用星号去方便的高亮所有字段。如果你使用了通配符,那么要考虑启用hl.requiredFieldMatch选项。 
  2. hl.requireFieldMatch: 如果置为true,除非用hl.fl指定了该字段,查询结果才会被高亮。它的默认值是false。
  3. hl.usePhraseHighlighter: 如果一个查询中含有短语(引号框起来的)那么会保证一定要完全匹配短语的才会被高亮。
  4. hl.highlightMultiTerm :如果使用通配符和模糊搜索,那么会确保与通配符匹配的term会高亮。默认为false,同时hl.usePhraseHighlighter要为true。
  5. 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
}

 

 

 

 

 

 

  

 

  

 

本文转载自:http://eksliang.iteye.com/blog/2100461

闪电
粉丝 74
博文 392
码字总数 6789
作品 0
海淀
技术主管
私信 提问
solr4.8安装步骤和配置IK分词器

Solr4.8 安装步骤如下: 1. 下载solr4.8,到Apache官网下载 2. 准备一个tomcat,我这边用tomcat7 3. 将下载好的solr4.8解压缩开,将里面的solr-4.8.0solr-4.8.0examplewebappssolr.war拷贝到...

james_you
2014/05/05
0
1
Solr高亮与Field权重

Solr高亮 原理 做搜索时,高亮是很常见的需求,那么Solr肯定也为高亮提供了支持。先解释下Solr高亮的原理,在我们设置了需要高亮显示的Field之后,查询得到的返回结果会多出来下面的内容: ...

Zero零_度
2015/08/17
0
0
solr4.7开发实践 2——高亮显示

第一种方式是solrj操作: public SolrDocumentList query(String str) { SolrQuery query = new SolrQuery(str); query.setHighlight(true);//开启高亮功能 query.addHighlightField("name,......

一枚Sir
2014/04/24
0
2
关于solrJ高亮的问题 困扰我三四天了

上面的是schema.xml的配置。 上面是我设置高亮的代码。 这是solrconfig.xml中的的配置。 但是当我查询后,通过QueryResponse.getHighlighting()后,文档的主键没有,可我明明设置了lGroupNum...

肖伟哥哥
2014/11/17
1K
1
搜索引擎(Solr-搜索详解2)

学完本课题,你应达成如下目标: 掌握分面搜索; 掌握搜索结果高亮用法 掌握查询建议用法 分面搜索 什么是分面搜索? 例子1: 想买一部手机,在电商网站的搜索框中输入手机,会得到什么? 我...

这很耳东先生
03/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

定制专属二维码思路——实现【微信,QQ】扫码登录

效果演示 1.先在natapp实现外网映射(https://natapp.cn) 2.natapp.exe 3.生成token链接(先开启redis) //生成二维码token链接(生成二维码)http://p5gc9b.natappfree.cc/generateCode //...

须臾之余
9分钟前
2
0
android studio 使用CMAKE

原文地址 前言 之前,每次需要边写C++代码的时候,我的内心都是拒绝的。 1. 它没有代码提示!!!这意味着我们必须自己手动敲出所有的代码,对于一个新手来说,要一个字母都不错且大小写也要...

shzwork
11分钟前
0
0
volatile/CAS/atomicInteger/BlockQueue/线程交互/原子引用

import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger......

一只小青蛙
12分钟前
0
0
apache隐藏版本信息及设置网页缓存

实战:源码编译安装apache及调优技巧 实战环境: 生产环境中,部署了apache之后,我们应该从安全还是性能角度,在apache服务上线之前,对其做诸多的优化调试才行。 技巧1: 安装apache屏蔽a...

寰宇01
15分钟前
0
0
C 语言 二级指针操作文件 柔性数组使用

#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct _info* pInfo;struct _info{int line;int len;char data[0];}info;int getFil......

小张525
55分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部