`
qindongliang1922
  • 浏览: 2189468 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:117687
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:126090
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:60040
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:71417
社区版块
存档分类
最新评论

在Lucene或Solr中实现高亮的策略

    博客分类:
  • Solr
阅读更多

一:功能背景

最近要做个高亮的搜索需求,以前也搞过,所以没啥难度,只不过原来用的是Lucene,现在要换成Solr而已,在Lucene4.x的时候,散仙在以前的文章中也分析过如何在搜索的时候实现高亮,主要有三种方式,具体内容,请参考散仙以前的2篇文章:
第一:在Lucene4.3中实现高亮的方式
http://qindongliang.iteye.com/blog/1953409
第二:在Solr4.3中服务端高亮的方式
http://qindongliang.iteye.com/blog/2034270



二:方案探究

从整体来讲,主要有2种实现方式,第一就是前台展示数据时使用js高亮,第二就是服务端高亮后返回给前台

后端高亮的流程:



前端高亮的流程:




三:优劣分析

后端高亮:
性能:并发量大的情况下,可能对服务器的性能造成一定影响。
可靠性:高,在浏览器禁用js脚本情况下,仍可以正常显示
前端高亮:
性能:由客户端渲染,相对性能稍高
可靠性:低,在浏览器禁用js脚本情况下,高亮失效

四:注意事项

前台高亮时,需要把句子分词后的词组,返回给前台js,便于正则替换,关于把句子分词,可以用lucene也可以用solr,方式分别如下:
在Lucene中:

/***
	 * 
	 * @param analyzer 分词器
	 * @param text  分词句子
	 * @throws Exception
	 */
	public static void analyzer(Analyzer analyzer,String text)throws Exception{
		        TokenStream ts = analyzer.tokenStream("name",text);
		        CharTermAttribute term=ts.addAttribute(CharTermAttribute.class);
		        ts.reset();
		        while(ts.incrementToken()){
		            System.out.println(term.toString());
		        }
		        ts.end();
		        ts.close();
	}


在solr中,方式1:

	/***
	 * 根据字段类型分词并打印分词结果
	 * @param text
	 */
	public static void showAnalysisType(String text)throws Exception{
	
		String fieldType="ik";//分词类型
		//调用服务
		FieldAnalysisRequest request = new FieldAnalysisRequest("/analysis/field");
		//设置类型
		request.addFieldType(fieldType);
		//设置待分词的句子 
		request.setFieldValue(text);
		//sc=private static HttpSolrClient sc=new HttpSolrClient("http://localhost:8983/solr/one");
		//得到结果
	    FieldAnalysisResponse response =request.process(sc);
	    //得到对应的Analysis
	    Analysis as = response.getFieldTypeAnalysis(fieldType);
	    List<String> results = new ArrayList<String>();
	    //使用guava的库,将iteratro对象转换为List对象
        List<AnalysisPhase> list=Lists.newArrayList(as.getIndexPhases().iterator());
        //取某一个fitler的分词结果,因为一个fieldtype很有可能配置了多个filter,每一步经过
        //filter的结果都不一样,所以此处,要指定一个获取分词结果的filter,跟因为有关
        //所以散仙这里就写list.size-1了,注意此处的值,并不是固定的
	     for(TokenInfo token:list.get(list.size()-1).getTokens()){
	    	 //得到分词数据结果
	    	 results.add(token.getText());
	     }
	     
	}


在solr中,方式2:

/***
	 * 根据字段名分词并打印分词结果
	 * @param text
	 */
	public static void showAnalysis(String text)throws Exception{
		 //此处是字段名
		 String fieldName="cpyName";
		 //固定写法
		 FieldAnalysisRequest request = new FieldAnalysisRequest("/analysis/field");
		 //添加field
		 request.addFieldName(fieldName);
		 //设置需要分词的句子
		 request.setFieldValue(text);
		 //请求solr服务得到结果
	     FieldAnalysisResponse response =request.process(sc);
	     //封装结果,返回,可能供其后续调用的业务处理
	     List<String> results = new ArrayList<String>();
	     //根据字段名获取结果 
	     Analysis as=response.getFieldNameAnalysis(fieldName);
	     //使用guava工具包,转iterator为List
	     List<AnalysisPhase> list=Lists.newArrayList(as.getIndexPhases().iterator());
	     //打印分词结果
	     for(TokenInfo token:list.get(list.size()-1).getTokens()){
	    	 System.out.println(token.getText());
	     }
	     
	}



最后欢迎大家扫码关注微信公众号:我是攻城师(woshigcs),我们一起学习,进步和交流!(woshigcs)
本公众号的内容是有关搜索和大数据技术和互联网等方面内容的分享,也是一个温馨的技术互动交流的小家园,有什么问题随时都可以留言,欢迎大家来访!




  • 大小: 219.7 KB
  • 大小: 203.2 KB
0
2
分享到:
评论

相关推荐

    lucene,solr的使用

    - **使用方式**:Lucene通常作为库直接集成到应用程序中,而Solr则作为一个独立的服务运行。 - **功能丰富程度**:Solr相对于Lucene来说,提供了更多高级功能,如分面搜索、自动完成等。 - **集群支持**:Solr支持...

    Lucene&solr.zip

    本篇将详细阐述Lucene和Solr的基本概念、工作原理以及如何在实际应用中使用它们。 **1. Lucene简介** Lucene是一个由Apache软件基金会开发的全文检索库,它提供了高效的、可扩展的文本搜索功能。Lucene的核心功能...

    IKAnalyzer 适用 lucene和solr 5.4.0版本

    3. **配置Lucene或Solr**:将生成的jar包添加到Lucene或Solr的lib目录下,然后在相应配置文件中指定IKAnalyzer为Analyzer。 4. **测试与应用**:编写测试代码验证IKAnalyzer的分词效果,确认无误后即可在实际项目中...

    IK中文分词器2012版支持Lucene和solr

    - 在Lucene或Solr项目中引入IK Analyzer的依赖库。 - 配置Analyzer,指定使用IKAnalyzer,并根据需求定制分词策略。 - 创建索引时,使用IK Analyzer对中文文本进行分词,生成关键词。 - 查询时,同样使用IK ...

    lucene简单介绍及solr搭建使用

    Solr支持多种查询类型,包括标准查询、范围查询、多字段查询等,同时还可以实现高亮显示搜索结果中的关键词。 **实战演练** "01solr企业级搜索引擎准备阶段.pdf"和"02solr企业级搜索引擎实战演练.pdf"可能涵盖了从...

    IKAnalyzer 适用 lucene和solr 5.4.0版本(新)

    IKAnalyzer 是一个专门为中文分词设计的开源分析器,它在 Lucene 和 Solr 中广泛使用,以提高中文文本检索的准确性和效率。这个压缩包 "ik-analyzer-solr5.4.0" 显然是针对 Lucene 5.4.0 和 Solr 5.4.0 版本优化的 ...

    搜索引擎解密Lucene与Solr的前世今生.ppt

    总结起来,Lucene是搜索引擎的核心,负责构建高效的全文索引,而Solr则在Lucene的基础上提供了完整的搜索解决方案,两者共同构成了强大的搜索平台。理解并掌握这两者,对于开发和优化搜索引擎应用具有至关重要的意义...

    Lucene分词器资源包

    **Lucene分词器资源包详解** Lucene是一款开源的全文搜索...总的来说,这个资源包为开发者提供了在Java项目中实现Lucene分词搜索所需的基础组件,但实际应用还需要结合具体的业务需求和使用场景进行适当的配置和优化。

    solr实现的搜索引擎

    Solr还包含许多高级特性,如 faceting(分类统计)、spell checking(拼写检查)、highlighting(高亮显示)、more like this(类似文档推荐)等,这些功能在`webapp`中的代码可能有具体实现。 结合《解密搜索引擎...

    solr中文分词器

    Solr默认的分词策略主要针对英文文本,它以空格为分隔符进行分词,而对于中文这种没有明显分隔符的语言,就需要特定的分词器来实现精确的分词。中文分词器能够将连续的汉字序列切分成具有语义的词汇,这对于中文搜索...

    solr中cache综述

    Apache Solr是一个高性能、可伸缩的企业级搜索平台,它基于Lucene构建,在实际应用中为了提高查询效率和性能,内置了一系列缓存机制(Cache)。这些缓存机制不仅能够有效减少对底层索引的直接访问次数,还能够在很大...

    基于Solr的多表join查询加速方法

    在Solr中模拟join操作通常有两种策略:嵌入式数据模型和外部数据源查询(ExternalFileField或SolrJDBC)。 1. **嵌入式数据模型**: 在这种模式下,我们将多个表的数据合并到一个Solr文档中,以字段的形式存储相...

    solr的学习

    Lucene 仅提供了完整的查询引擎和索引引擎,目的是为软件开发人员提供一个简单易用的工具包,以便在目标系统中实现全文检索的功能,或者以 Lucene 为基础构建全文检索应用。 - **Solr**:其目标是打造一款企业级的...

    paoding-webx3-solr-lucene

    在"paoding-webx3-solr-lucene"中,Paoding扮演着将用户输入的中文查询字符串拆分成有意义的词汇的角色,这些词汇随后会被用于在索引中进行匹配。 最后,Solr是Apache Lucene的一个分支,是一个高度可定制的、高...

    solr学习入门教程

    Lucene是当前最流行且开源的全文检索工具包之一,被广泛应用于各种场景,例如Eclipse帮助系统中的搜索功能就是基于Lucene实现的。 Solr与Lucene并非竞争对手,而是紧密关联。Solr实际上依赖于Lucene,它是Lucene的...

    solr资料以及问题汇总

    "solr json ajax - chenlb 的学习笔迹 - JavaEye技术网站.mht"可能涉及到Solr的JSON API和Ajax技术的结合,这在现代Web应用中很常见,能够实现异步交互,提升用户体验。 "Lucene-Solr开发经验.mht"文件可能分享了...

    ikanalyzer-solr8.4.0_solr8_solr_ikanalyzer_中文分词_

    在 Solr 中,ikanalyzer 是一个重要的组件,它通过自定义Analyzer来实现中文的分词处理。Analyzer是Solr中处理文本的核心组件,负责将原始输入文本转换为一系列的关键词(Token),这些关键词可以被索引和搜索。ik...

Global site tag (gtag.js) - Google Analytics