Solr 环境搭建

当网站数据量达到一定规模时,我们会发现搜索的速度越来越慢。在这种情况下我们可以找出消耗性能的语句对数据库、代码做必要的优化,但是这不是万能的,当我们发现网页访问的速度因为数据库本身的性能造成瓶颈的时候,就要考虑使用全文索引技术了。

       做 过.net 的同学应该都听说过Lucene.net,而Solr是一个高性能,采用Java5开发, 基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,实现了可配置、可扩展并对查询性能进行了优化,并且提 供了一个完善的功能管理界面。因此我们选择Solr。

     首先 下载安装 JDK 、 tomcat  下载  solr 将solr解压到磁盘。

创建solr工作目录 d:SorlHome  把下载的solr文件夹中example/solr下的所有文件拷贝到 d:solorhome目录下 ,同时把下载的solr文件夹中 dist 下 solr-4.10.3.war 文件 也拷贝过来,改名为 solr.war

打开 tomcat的安装目录,在conf/catalina/localhost 下添加 solr.xml 文件  在tomcat 中注册 Solr

<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="D:/SorlHome/solr.war" reloadable="true">
    <Environment name="solr/home" type="java.lang.String" value="D:/SorlHome" override="true"/>
</Context>

把下载的solr文件夹中examplelibext 复制到 tomcat 的apache-tomcat-7.0.59lib目录下面

如果缺少这一步运行时会报找不到架包的错误

java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
	at org.apache.http.impl.client.CloseableHttpClient.<init>(CloseableHttpClient.java:60)
	at org.apache.http.impl.client.AbstractHttpClient.<init>(AbstractHttpClient.java:271)
	at org.apache.http.impl.client.DefaultHttpClient.<init>(DefaultHttpClient.java:127)
	at org.apache.http.impl.client.SystemDefaultHttpClient.<init>(SystemDefaultHttpClient.java:116)
	at org.apache.solr.client.solrj.impl.HttpClientUtil.createClient(HttpClientUtil.java:117)
	at org.apache.solr.servlet.SolrDispatchFilter.<init>(SolrDispatchFilter.java:120)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
	at java.lang.Class.newInstance(Class.java:438)
	at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:116)
	at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:258)
	at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105)
	at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4854)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5542)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:649)
	at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:672)
	at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1859)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
	... 27 more

 重启tomcat  看看跑起来没

  下面就要配置中文分词了,目前比较好的分词器有  IK Analyzer  paoding(疱丁解牛)imdict  mmseg4j 这里选择用 IK

 下载IK 把 IK-Analyzer-2012FFdist  目录下的架包复制到 tomcat 的webappssolrWEB-INFlib目录下面 并创建 classes 文件夹

  把  IKAnalyzer.cfg.xml、 stopword.dic  文件复制到新建的 class文件夹下面

  打开 d:SorlHome 目录 修改 /collection1/conf/schema.xml 文件 在根节点下添加节点

<fieldType name="text_ik" class="solr.TextField">
        <analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
        <analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
    </fieldType>

找到下面几个节点,把 type 属性改为 “text_ik", 在121行附近。

<field name="name" type="text_ik" indexed="true" stored="true"/>
    <field name="manu" type="text_ik" indexed="true" stored="true" omitNorms="true"/>

重启tomcat,访问 http://localhost:8080/solr/ 选择 collection1 -> Analysis  

Analyse Fieldname/ FieldType 选择刚才配置的 "text_ik" 点击Analyse Vlaues 按钮看看效果吧

Ok!基本工作完成了。下面还有很多工作要做,不急慢慢来。

原文地址:https://www.cnblogs.com/fengh/p/4290132.html