solr 应用全面解析,简单的应用,多实例,分布式索引分发,如何在客户端配置注册多实例

本文详细介绍了Apache Solr,它是一个基于Lucene的全文检索组件,可用于搭建复杂的集群环境。文章涵盖了如何为web应用快速配置Solr服务,包括所需的jar包、目录结构和solrhome配置。接着,讨论了Solr相关包的概要,特别是SolrCore、ReplicationHandler和请求处理流程。最后,重点讲解了如何配置多实例的CoreContainer容器以及分布式Solr服务的搭建,包括主从同步和HTTP请求执行顺序。
摘要由CSDN通过智能技术生成
/****************************/
1.solr认识?
solr是基于lucene开发包而搭建起来的一个依赖于Servlet容器的一个全文检索组件,他可以为自己的
web应用提供简单的检索服务,也可以搭建复杂的集群环境进行全文检索,例如如果索引文件很大大概
有7-90GB的索引文件就需要做分布式了应为这样的数据量一台机器的检索数据的速度太慢,如果需要
进行集群demo测试可以在本机多开启几个web应用服务器就可以了。
/****************************/


/****************************/
2.快速的为你的web应用提供solr全文检索服务
->需要的jar:
apache-solr-core-3.2.0.jar
apache-solr-solrj-3.2.0.jar-->用于提供测试solr全文检索的java客户端

->如何配置你的solrhome的主要目录结构
 可以以任意名字的目录进行配置但是在这个目录的里面需要按照solr的要求来配置
 在xxx目录里面有bin,data,conf和solr.xml三个目录和一个配置文件,这个配置文件用于
 配置CoreContainer容器的多实例通过这个配置实现
 
 在bin里面是solr插件的第三方jar包也就是你需要为solr添加的插件包放在这个里面
 data下面有index,和spellcheck两个目录分别是存放索引文件和拼写检查的什么东西

 在conf下面全部是与当前solrcore实例相关的一些配置文件,例如solrconfig.xml,schema.xml
 scripts.conf这三个文件是最重要的,第一个用于配置当前solrcore如何对外提供全文检索服务,
 第二个用于配置当前solrcore实例的索引文档的格式以及文档的字段信息,第三个用于做solr分布式
 索引分发以及同步的配置文件
 
 
->solr如何与servlet容器相关联[如何配置solrhome]
 >上面已经配置好solr的木要目录结构然后只要让solrDispatchFilter
  在实例化的时候找到这个目录就能够初始化我们的solrhome了
 >可以在过滤器或者监听器构造函数中通过设置jvm系统参数的形式
  System.setProperty("solr.solr.home","dir");
 >web.xml中进行描述,上面已经复制过
 >通过在tomcat的JNDI容器中进行指定就是那个context.xml中


-->在web.xml中配置SolrDispatchFilter.java
<!-- 过滤所有与solr相关的http请求  -->
<filter>
	<filter-name>SolrRequestFilter</filter-name>
	<filter-class>org.apache.solr.servlet.SolrDispatchFilter</filter-class>
	<init-param>
	        <!-- 通过一特定开头的字符标志需要solr服务 -->
		<param-name>path-prefix</param-name>
		<param-value>solrservice</param-value>
	</init-param>
</filter>
<filter-mapping>
 <filter-name>SolrRequestFilter</filter-name>
 <url-pattern>/*</url-pattern>
</filter-mapping>
/****************************/

3.solr相关包的概要
首先需要的jar包有:
/****************************/
->apache-solr-core-3.2.0.jar;
这是jar包中所包含的包:
--->org.apache.solr.analysis
这个包主要解决分词问题,学习solr之前必须对lucene的简单结构
进行了解如何分词lucene中已经提到过
--->org.apache.solr.client.solrj.embedded
solrj主要提供方便的方式去应用solr全文检索的功能

--->org.apache.solr.core
包含的主要类介绍
org.apache.solr.core.CoreContainer.java,
org.apache.solr.core.Config.java,
org.apache.solr.core.SolrConfig.java,
org.apache.solr.core.SolrCore.java
org.apache.solr.core.CoreDescriptor.java,
org.apache.solr.core.DirectoryFactory.java,
org.apache.solr.core.SolrResourceLoader.java

不管你有多少个solrcore实例那么solrcore的实例都会存放在我们的CoreContainer的
protected final Map<String, SolrCore> cores = new LinkedHashMap<String, SolrCore>();
这个属性中也就是用于保存solrcore实例,那么solrCore是如何被创建的,他是根据SolrConfig创建
的solrConfig继承自Config类Config类提供的xPath的方式去解析xml文件solrConfig对应到我们的SolrConfig.xml
文件,然后SolrResourceLoader是用来加载配置文件的并且用于定位solrhome:solrhome在SolrResourceLoader是
怎么定位到solrhome的:
public static String locateSolrHome() {
    String home = null;
    // 功过JNDI的方式定位到solrHome的主要目录
    // 他可以在web.xml中这样配置
    //<env-entry>
	//<env-entry-name>solr/home</env-entry-name>
	//<env-entry-value>C:\\apache-tomcat-6.0.35-windows-x64\\apache-tomcat-6.0.35\\webapps\\solr</env-entry-value>
	//<env-entry-type>java.lang.String</env-entry-type>
    //</env-entry>
    try {
      Context c = new InitialContext();
      home = (String)c.lookup("java:comp/env/"+project+"/home");
      log.info("Using JNDI solr.home: "+home );
    } catch (NoInitialContextException e) {
      log.info("JNDI not configured for "+project+" (NoInitialContextEx)");
    } catch (NamingException e) {
      log.info("No /"+project+"/home in JNDI");
    } catch( RuntimeException ex ) {
      log.warn("Odd RuntimeException while testing for JNDI: " + ex.getMessage());
    } 
    
    // 如果JNDI没有找到主要目录的话就会尝试在System.getProperty("solr.solr.home");
    // 也就是JVM的系统参数中进行一个查找只要是在同一个JVM中都是可以找到的
    // 你也可以在某个监听器或者过滤器中指定solrhome他是这样指定的
    // 需要注意的是你的过滤器必须要在SolrDispatchFilter.java这个过滤器之前因为
    // 容器初始化过滤器的时候是根据配置文件的顺序进行实例话的
    // 在SolrDispatchFilter.java过滤器实例化的时候进行了很多的solr初始化服务包括容器的初始化等
    // 所以必须要在这个过滤器实例化之前指定solrhome的主要目录
    // System.setProperty("solr.solr.home","dir");
    if( home == null ) {
      String prop = project + ".solr.home";
      home = System.getProperty(prop);
      if( home != null ) {
        log.info("using system property "+prop+": " + home );
      }
    }
    
    // 如果上面的两种方式都没有找到就会到web应用的主目录下就行查找
    // 如果你的web应用名字叫test的话他就到test目录下去找solr这个目录
    if( home == null ) {
      home = project + '/';
      log.info(project + " home defaulted to '" + home + "' (could not find system property or JNDI)");
    }
    return n
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值