`
haiziwoainixx
  • 浏览: 419695 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SOLR使用手册之优化及拓展

 
阅读更多
solr性能优化:
将索引放在内存中能有效的提升索引和搜索效率
此外大部分solr的性能优化配置都在solrconfig.xml中
主要内容有:使用的lib配置,包含依赖的jar和Solr的一些插件;组件信息配置;索引配置和查询配置,
下面详细说一下索引配置和查询配置.
一.索引配置
 

属性

描述

useCompoundFile

通过将很多 Lucene 内部文件整合到一个文件来减少使用中的文件的数量。这可有助于减少   Solr 使用的文件句柄数目,代价是降低了性能。除非是应用程序用完了文件句柄,否则   false 的默认值应该就已经足够。

ramBufferSizeMB

在添加或删除文档时,为了减少频繁的更些索引,Solr会选缓存在内存中,当内存中的文件大于设置的值,才会更新到索引库。较大的值可使索引时间变快但会牺牲较多的内存。如两个值同时设置,满足一个就会进行刷新索引.

maxBufferedDocs

mergeFactor

决定低水平的 Lucene 段被合并的频率。较小的值(最小为 2)使用的内存较少但导致的索引时间也更慢。较大的值可使索引时间变快但会牺牲较多的内存。

 maxIndexingThreads

indexWriter生成索引时使用的最大线程数

unlockOnStartup

unlockOnStartup 告知   Solr 忽略在多线程环境中用来保护索引的锁定机制。在某些情况下,索引可能会由于不正确的关机或其他错误而一直处于锁定,这就妨碍了添加和更新。将其设置为   true 可以禁用启动锁定,进而允许进行添加和更新。

lockType

single: 在只读索引或是没有其它进程修改索引时使用.

native: 使用操作系统本地文件锁,不能使用多个Solr在同一个JVM中共享一个索引.

simple :使用一个文本文件锁定索引.

 
二.查询配置

属性

描述

maxBooleanClauses

最大的BooleanQuery数量. 当值超出时,抛出   TooManyClausesException.注意这个是全局的,如果是多个SolrCore都会使用一个值,每个Core里设置不一样的话,会使用最后一个的.

filterCache

filterCache存储了无序的lucene   document id集合,1.存储了filter   queries(“fq”参数)得到的document   id集合结果。2还可用于facet查询3. 如果配置了useFilterForSortedQuery,那么如果查询有filter,则使用filterCache。

queryResultCache

缓存搜索结果,一个文档ID列表

documentCache

缓存Lucene的Document对象,不会自热

fieldValueCache

字段缓存使用文档ID进行快速访问。默认情况下创建fieldValueCache即使这里没有配置。

enableLazyFieldLoading

若应用程序预期只会检索 Document 上少数几个   Field,那么可以将属性设置为 true。延迟加载的一个常见场景大都发生在应用程序返回和显示一系列搜索结果的时候,用户常常会单击其中的一个来查看存储在此索引中的原始文档。初始的显示常常只需要显示很短的一段信息。若考虑到检索大型 Document 的代价,除非必需,否则就应该避免加载整个文档。

queryResultWindowSize

一次查询中存储最多的doc的id数目.

queryResultMaxDocsCached

查询结果doc的最大缓存数量, 例如要求每页显示10条,这里设置是20条,也就是说缓存里总会给你多出10条的数据.让你点示下一页时很快拿到数据.

listener

选项定义   newSearcher 和   firstSearcher 事件,您可以使用这些事件来指定实例化新搜索程序或第一个搜索程序时应该执行哪些查询。如果应用程序期望请求某些特定的查询,那么在创建新搜索程序或第一个搜索程序时就应该反注释这些部分并执行适当的查询。

useColdSearcher

是否使用冷搜索,为false时使用自热后的searcher

maxWarmingSearchers

最大自热searcher数量

queryResultWindowSize 因为查询参数是有start和rows的,所以某个QueryResultKey可能命中了cache,但start和rows却不在cache的
document id set范围内。当然,document id
set是越大命中的概率越大,但这也会很浪费内存,这就需要个参数:queryResultWindowSize来指定document id
set的大小。
queryResultMaxDocsCached 查询结果最大缓存文档数量

通过solr的管理界面可以看到当前缓存的配置及状态:
http://192.168.66.99:8080/solr/#/test_shard1_replica2/plugins/cache
实际场景中需要根据命中率,机器配置等来处理
关于缓存的介绍在单独一篇文章中: http://haiziwoainixx.iteye.com/admin/blogs/2095473
 
 
 
三.solr拓展
 
olr是一个可扩展的服务,我们可以添加自己的包和类,在solr已经实现的default处理逻辑之上,再添加我们自己的搜索逻辑。
实现手段就是继承solr的基础类,重写或者改写新的FilterSearch Component以及Request Handler类,来取代solr默认的处理类或者与之并存
 
1.定制Request Handler
默认的request handler直接得到你http里url带来的传参,然后就开始根据配置分发任务,
让各自的component去处理查询请求了。定制request handler的好处是,在这个步骤之中,
你可以再额外进行一些别的逻辑处理,比如你可以写写log,在得到SolrQueryRequest后,传入前查看处理一下里面的query,对SolrQueryResponse里得到的数据集再做些处理等等。
定制方式是自己继承StandardRequestHandler类(该类继承了SearchHandler),
package myplugin.handler;

import org.apache.solr.handler.StandardRequestHandler;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.response.SolrQueryResponse;

public class MySearchHandler extends StandardRequestHandler {
	public void handleRequestBody(SolrQueryRequest request,
			SolrQueryResponse response) throws Exception {
		super.handleRequestBody(request, response);
		//TODO: whatever you want
	}
}
 
并在solrconfig.xml里配置即可起效。
  <requestHandler name="/test" class="myplugin.handler.MySearchHandler">
    <lst name="defaults">
      <str name="echoParams">explicit</str>
      <int name="rows">10</int>
      <str name="df">usergoods_mix</str>
    </lst>
  </requestHandler>
别忘了把自己的jar包放到webapp/的WEB-INF的lib目录下。solr也为我们定制了别的handler,比如DisMaxRequestHandler,LukeRequestHandler,MoreLikeThisHandler

和SpellCheckerRequestHandler等等。大家可以自己看看源码,知道他们分别做什么。都在org.apache.solr.handler内。

 
 
2.定制search component
 
  对同一个request handler,可以按顺序配置多个search component,这些component会在handler类里各自得到自己的任务,
把SolrQueryRequest和SolrQueryResponse传承下去,在这个过程中,我们可以加入自己的component,定制我们想要的搜索结果和搜索逻辑

我简单把实现代码帖一下,主要还是通过继承基础类,最后配置到solrconfig.xml内。

public class MySearchComponent extends SearchComponent {
	String query = null;
	@Override
	public void prepare(ResponseBuilder rb) throws IOException {
		query = rb.req.getParams().get("q", ""); 
		System.out.println("prepare: " + query);
	}
	@Override
	public void process(ResponseBuilder rb) throws IOException {
		if (query != null) {		
			rb.rsp.add("mytest", "zbf"); // <str name="mytest">zbf</str>
//	System.out.println("process: " + map.get("mytest").toString());
		}
	}
	@Override
	public String getDescription() {
		return "MySearchComponent";
	}
	@Override
	public String getSource() {
		return "";
	}
	@Override
	public String getSourceId() {
		return "";
	}
	@Override
	public String getVersion() {
		return "0.1";
	}
}
主要就是在prepare()里获取到SolrQueryRequest里的查询query,在process()里自己处理,并且获取到前一次component处理得到的SolrQueryResponse,
里面可能会有已经排好序的查询数据集,你也可以做一些二次处理,简单过滤,重新排序等事情
  <requestHandler name="/test" class="myplugin.handler.MySearchHandler">
    <lst name="defaults">
      <str name="echoParams">explicit</str>
      <int name="rows">10</int>
      <str name="df">usergoods_mix</str>
    </lst>
    <arr name="components">
      <str>query</str>
      <str>myComponent</str>
    </arr>
  </requestHandler>
  <searchComponent name="myComponent" class="myplugin.component.MySearchComponent">
  </searchComponent>

先声明自己的searchComponent,然后放入handler里使用起来,注意配置顺序,因为component是按顺序串接起来的。

 
3.定制Filter
他的作用就是如果你自己定制了Filter,你就可以按自己的方式处理字符串。
可以参考中文分词器的代码实现。
 
4.定制监听器
 
分享到:
评论
1 楼 夜行侠 2016-08-31  
基于微博数据检测的Solr实战开发
课程观看地址:http://www.xuetuwuyou.com/course/145
课程出自学途无忧网:http://www.xuetuwuyou.com


solrcloud5.2.1+zookeeper一部精通
课程观看地址:http://www.xuetuwuyou.com/course/15

相关推荐

    Solr(Cloudera)使用手册

    ### Solr(Cloudera)使用手册 #### 一、创建Collection与管理实例 在使用Solr(Cloudera)时,创建Collection是基本的操作之一。Collection是Solr中的数据存储单元,相当于关系数据库中的表。 ##### 创建路径与实例 ...

    solr6.0手册

    Solr 6.0手册是一份详细介绍如何使用Solr的文档,它包括PDF格式的指南、目录,并且具备实用性。手册主要针对那些想要学习或部署Solr的用户。Apache软件基金会(ASF)是该软件及其手册的版权所有者,并根据一个或多个...

    solr分词器使用手册

    ### Solr分词器使用手册知识点详解 #### 一、Solr概述 - **定义**:Solr是一款基于Java开发的、由Apache基金会维护的顶级开源项目,它是一款高性能的全文检索服务器。Solr不仅继承了Lucene的核心索引与搜索能力,还...

    solr4.9安装使用手册

    Solr 是一个开源的全文搜索引擎,它提供...理解Solr的核心概念,如核心、字段类型和索引,对于有效地使用和管理Solr至关重要。同时,保持对最新官方文档的了解,能够帮助你解决可能出现的问题,提升你的Solr应用能力。

    银河麒麟服务器操作系统-Solr适配手册.pdf

    《银河麒麟服务器操作系统-Solr适配手册》 在当今数字化时代,企业对高效、可靠的搜索引擎的需求日益增强。Apache Solr作为一个开源的企业级全文搜索引擎,因其强大的搜索功能和灵活的扩展性,在诸多领域中得到了...

    Solr6.2官方版参考手册

    ### Solr 6.2 官方版参考手册知识点概览 #### 一、Solr简介与概述 **Apache Solr** 是一个高度可扩展且高性能的企业级...通过官方手册的学习,开发者可以更好地掌握 Solr 的使用技巧,从而构建出高效稳定的搜索应用。

    solr 的使用及安装

    本文将深入讲解 Solr 的使用及安装过程。 一、Solr 简介 Solr 基于 Lucene 库,提供了一个高度可配置和可扩展的平台,用于处理和索引大量数据,支持多种数据源,如文件、数据库等。其主要特性包括: 1. **全文搜索...

    solr 安装和使用

    ### Solr 安装与使用详解 #### 一、Solr简介 Solr 是一个高性能、采用Java开发的全文搜索引擎。它可以轻松地被集成到基于Web的应用程序...以上是 Solr 的安装、使用及 IKAnalyzer 集成的详细介绍,希望对您有所帮助。

    Solr安装手册

    ### Solr安装手册知识点 #### 一、Solr简介与版本要求 - **Solr**是一种基于Lucene的开源全文搜索服务器。它提供了一个高性能、可伸缩的搜索平台,并支持复杂的查询语法以及多种索引格式。Solr适用于构建企业级...

    solr新版参考手册(apache-solr-ref-guide-4.4)

    本篇参考手册是针对Apache Solr 4.4版本的详细介绍,包含了从安装、配置到使用的详细步骤,以及对其背后原理的深入探讨。 首先,手册的Getting Started部分指导用户如何安装和设置Solr。这部分内容适合那些刚开始...

    solr5.5.4部署及使用

    在实际应用中,Solr的部署和使用不仅涉及上述基础步骤,还需要考虑集群配置、性能优化、安全设置等多个方面。例如,通过SolrCloud实现分布式部署,利用Sharding和Replication提高可用性和性能,以及通过设置过滤器、...

    solr的安装使用步骤

    ### Solr的安装使用步骤详解 #### Solr概述与特性 **Solr** 是 Apache 下的一个顶级开源项目,它基于 **Lucene** 进行构建,提供了强大的全文搜索能力。相较于 Lucene,Solr 提供了更为丰富的查询语言支持,并且...

    Solr 使用文档 pdf版

    ### Solr 3.* 使用手册知识点总结 #### 一、Solr简介与核心概念 - **Solr**:Apache Solr 是一个高性能、基于 Lucene 的全功能搜索引擎平台。它支持分布式搜索,并提供了丰富的功能集来满足企业级搜索需求。 - **...

    solr介绍及使用.docx

    确保你的系统已经安装了 JDK 及相应的运行环境,Solr 需要在 Java 1.6 或更高版本的 JVM 上运行。接着,将下载的 Solr 解压并将相关文件复制到 Tomcat 的 webapps 目录下,创建 Solr 的工作目录(solrHome),并配置...

    solr使用和原理

    solr使用和原理 简单明了的介绍了solr的使用和原理,及其部署方式,适合初学者第一次部署

    solr6.5使用的IK分词

    "solr6.5使用的IK分词"就是一个针对Solr 6.5版本的中文分词解决方案。 **IK分词器** IK分词器(Intelligent Chinese Analyzer)是由Lucene社区开发的一款高性能的中文分词工具,适用于Java环境。它的主要目标是为...

    easynet.solr开发与使用

    《easynet.solr开发与使用》 在现代信息技术领域,搜索引擎已经成为不可或缺的一部分,而Apache Solr作为一款强大的开源搜索引擎,被广泛应用于各种数据检索场景。为了方便开发者更高效地集成和操作Solr,Easynet...

    solr集群安装手册

    ### Solr集群安装手册知识点详解 #### 一、SolrCloud概述 - **定义与应用场景:** - **定义:** SolrCloud 是 Apache Solr 提供的一种分布式搜索解决方案,适用于需要大规模、高容错性、分布式索引及检索能力的...

    Apache Solr(solr-8.11.1.zip)

    8. **搜索性能优化**:Solr提供了多种优化手段,包括使用倒排索引、缓存策略、查询优化器等,以提高查询速度和整体性能。 9. **安全与认证**:Solr 8.x引入了内置的安全性框架,包括Zookeeper的ACL和Solr的Role-...

    Solr权威指南-上卷

    Solr的多种性能优化技巧,如索引的性能优化、缓存的性能 优化、查询的性能优化、JVM和Web容器的优化,以及操作系统级别的优化。 拓展知识中首先讲解了Solr的一些比较生僻的知识点,如伪域、多语种索引支持、安全认证...

Global site tag (gtag.js) - Google Analytics