Solr安装及集成javaWeb

1.下载solr-4.7.1

http://www.apache.org/dyn/closer.cgi/lucene/solr/4.7.1

环境需求:java 1.6版本以上;solr运行需要java serverlet 容器,默认使用jetty,或者tomcat,jboss等等。

2.Tomcat部署solr:

1. 安装好jdk 1.6以上(我用是jdk 1.7.0_15)安装好tomcat(我用是apache-tomcat-7.0.6),并配置环境变量。

2. 将解压包中的solr-4.7.1/dist/solr-4.7.1.war复制到tomcat_dir/webapps/目录,并命名为solr.war。

3.  将solr-4.7.1/example/lib/ext/目录下的jar文件复制到tomcat/lib目录下,将solr-4.7.1/example/resources/下的log4j.properties文件复制到tomcat_dir/lib目录下;

切把 solr-4.7.1/example/solr,复制到tomcat_dir/bin下。

 

 4.修改tomcat_dir/conf/server.xml

?
1
2
3
4
  < Connector  port = "8080"  protocol = "HTTP/1.1"
                connectionTimeout = "20000"
                redirectPort = "8443" 
                URIEncoding = "UTF-8"  />

5.创建solr.xml,存放在路径:tomcat/conf/Catalina/localhost/solr.xml,内容:

?
1
2
3
4
< Context  path = "/solr"  docBase = "F:\Tomcat 7.0\webapps\solr.war"
          debug = "0"  crossContext = "true" >
   < Environment  name = "solr/home"  type = "java.lang.String"  value = "FF:\Tomcat 7.0\bin\solr\"  override = "true"  />
</ Context >

 注意:上面的docBase和value路径中不能存在中文字符,否则会出现404错误。

 此时若安装及配置都正确,在浏览器中输入:http://127.0.0.1:9000/solr/,会出现Solr的管理界面:

 

 

6.将F:\Tomcat 7.0\webapps下的solr.war包,启动项目解压;然后再添加几个jar包:

    solr-4.7.1\dist\solr-dataimporthandler-4.7.1.jar;

    solr-4.7.1\dist\solr-dataimporthandler-extras-4.7.1.jar;

    还要加载数据库驱动包:mysql-connector-java-3.1.13-bin.jar

7、在F:\Tomcat 7.0\bin\solr\collection1\conf 下的solrconfig.xml增加以下数据库配置:

?
1
2
3
4
5
< requestHandler  name = "/dataimport"  class = "org.apache.solr.handler.dataimport.DataImportHandler" >     
    < lst  name = "defaults" >     
      < str  name = "config" >data-config.xml</ str >     
    </ lst >     
   </ requestHandler >

8.将tomcat\bin\solr\collection1\conf下增加data-config.xml文件,内容如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
< dataConfig >  
     < dataSource  type = "JdbcDataSource"  
    driver = "com.mysql.jdbc.Driver"  
    url = "jdbc:mysql://192.168.1.221:3306/tmsdb"  
    user = "root"  
    password = "123456" />  
     < document  name = "content" >  
         < entity  name = "node"  query = "select id,author,title,content from solrdb" >  
             < field  column = "id"  name = "id"  />  
             < field  column = "author"  name = "author"  />  
             < field  column = "title"  name = "title"  />  
             < field  column = "content"  name = "content"  />
         </ entity >  
     </ document >  
</ dataConfig >

9.增加中文分词器,ik-analyzer的配置如下:

目前的中文分词主要有两种 
    1,基于中科院ICTCLAS的隐式马尔科夫hhmm算法的中文分词器,例如smartcn等。(不支持自定义扩展词库) 
    2,基于正向迭代最细粒度切分算法(正向最大匹配并且最细分词)例如IK,庖丁等(支持自定义扩展词库) 

安装分词前,可以去下载IK的分词包 :

?
1
IK-Analyzer- 4.7 . 1 - 0.0 . 1 -SNAPSHOT.jar

下载完毕后,将此包放进tomcat\solr的\WEB-INF\lib下面:tomcat\webapps\solr\WEB-INF\lib  。

下面需要在solr的schemal.xml进行分词器注册:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!--  配置IK分词器 -->  
     < fieldType  name = "text_ik"  class = "solr.TextField"  positionIncrementGap = "100" >  
       < analyzer  type = "index" >  
       <!--  分词-->  
         < tokenizer  class = "org.wltea.analyzer.lucene.IKTokenizerFactory" />  
          <!--   禁用词过滤根据情况使用-->  
         <!-- <filter class="org.wltea.analyzer.lucene.IKStopFilterFactory"/> -->  
       </ analyzer >  
       < analyzer  type = "query" >  
        <!--  分词-->  
         < tokenizer  class = "org.wltea.analyzer.lucene.IKTokenizerFactory" />  
         <!--   禁用词过滤根据情况使用-->  
         <!-- <filter class="org.wltea.analyzer.lucene.IKStopFilterFactory"/>-->  
       </ analyzer >  
     </ fieldType >

最后还得配置一个引用字段就OK了

?
1
  < field  name = "ik"  type = "text_ik"  indexed = "true"  stored = "true"  multiValued = "true" />

②它的安装部署十分简单,将IKAnalyzer2012.jar部署亍项目的lib目录中;IKAnalyzer.cfg.xml不stopword.dic文件放置在class根目录(对于web项目,通常是WEB-I NF/classes目彔,同hibernate、log4j等配置文件相同)下即可 ;然后配置solr4.7中schema.xml配置解析器:

?
1
2
3
4
5
6
7
< schema  name = "example"  version = "1.1"
     …… 
     < fieldType  name = "text"  class = "solr.TextField"
         < analyzer  class = "org.wltea.analyzer.lucene.IKAnalyzer" /> 
     </ fieldType >
     …… 
</ schema >

10. solr schema.xml配置总结

    schema.xml 在solr/conf/目录下,类似于数据表配置文件。

为了改进性能,可以采取以下几种措施:

①.   将所有只用于搜索的,而不需要作为查询结果的field(特别是一些比较大的field)的stored设置为false。

②.   将不需要被用于搜索的,而只是作为查询结果返回的field的indexed设置为false。 

③.   删除所有不必要的copyField声明,根据需要决定是否进行存储。

④.   为了索引字段的最小化和搜索的效率,将所有的 text fields的index都设置成false,然后使用copyField将他们都复制到一个总的 text field上,然后对他进行搜索。

⑤.   使用尽可能高的Log输出等级,减少日志量。可以在solr/admin 中的 LOGGING 进行设置。

    特珠说明:

    1.   高亮是基于分词的,所有存储需要高亮显示的字段 一定要分词(text)才能高亮显示。

    2.   排序字段 是不能当  查询过滤的条件。

文本主要配置项:

    ①.   field 类型定义

          重点是中文分词的添加 

    ②.   field 各属性定义

          name     type类型   indexed是否建立索引  stored是否存储 required 是否必填项 multiValued多值存储

    ③.   唯一key

         <uniqueKey>id</uniqueKey>

         文档的唯一标识, 必须填写这个field(除非该field被标记required="false"),否则solr建立索引报错。

    ④.   默认搜索字段 field

         <defaultSearchField>text</defaultSearchField>

         如果搜索参数中没有指定具体的field,那么这个做为默认的域。

    ⑤.   搜索参数短语间逻辑

         <solrQueryParser defaultOperator="OR"/>

          配置搜索参数短语间的逻辑,可以是"AND|OR"。

          备注: AND是交集,OR是并集

    ⑥.  复制字段

         <copyField source="content" dest="text"/>

         将多个字段的值 复制至 一个字段中,如果被复制的字段都设置为stored,那个这个字段务必不要设置成stored=true

    ⑦.  自定义评分器

         <similarity class="......SolrSimilarity"/>

          SolrSimilarity 是继承 DefaultSimilarity的子类,或者实现评分器接口的类。

 

解析:multiValued:是否包含多个值,如果要使用后面的copyField将其他字段放入默认搜索中就必须允许多指,否则会报:multiple values encountered for non multiValued copy field content

defaultSearchField配置默认搜索索引,copyField可以将 title、author字段添加至content默认搜索中

?
1
2
3
4
5
< uniqueKey >id</ uniqueKey >  
  < defaultSearchField >content</ defaultSearchField >  
  < solrQueryParser  defaultOperator = "OR" />  
< copyField  source = "title"  dest = "content" />  
< copyField  source = "author"  dest = "content" />

 

猜你喜欢

转载自zihai367.iteye.com/blog/2204524