solr3.6.2 使用配置

本文介绍了如何在Windows环境下安装并配置Apache Solr、IK分词器,以及提供了Java示例代码,用于演示Solr的使用方法。包括下载并部署组件、配置Tomcat、添加中文分词器、Solr使用配置、Java示例代码等步骤。

环境:

  1. windows
  2. solr3.6.2下载:http://www.apache.org/dyn/closer.cgi/lucene/solr/3.6.2
  3. apache-tomcat-6.0.37下载:http://tomcat.apache.org/download-60.cgi#6.0.37
  4. ikanalyzer中文分词器下载:https://code.google.com/p/ik-analyzer/downloads/detail?name=IKAnalyzer3.2.8%20bin.zip
  5. luke3.5.0下载(可选):https://code.google.com/p/luke/downloads/detail?name=lukeall-3.5.0.jar
一、下载上述文件

二、tomcat发布solr配置
  1. 进入apache-tomcat-6.0.37\conf\Catalina\localhost 目录,新建 solr.xml ,内容如下:
    [html] view plaincopy
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <Context docBase="D:\apache-tomcat-6.0.37\webapps\solr" reloadable="true" >      
    3.     <Environment name="solr/home" type="java.lang.String" value="D:\apache-tomcat-6.0.37\webapps\solr\solr" override="true" />      
    4. </Context>  
  2. 将下载的apache-solr-3.6.2.zip 解压,进入apache-solr-3.6.2\dist 目录,将里面的apache-solr-3.6.2.war复制到apache-tomcat-6.0.37\webapps 目录下面,并重命名为solr.war
  3. 启动tomcat,系统会自动将 solr.war 进行解压,你会发现在 webapps 目录下面多了一个 solr的文件夹,然后停止tomcat服务,删除solr.war
  4. 进入apache-solr-3.6.2\example 目录,将里面的solr文件夹复制到 apache-tomcat-6.0.37\webapps\solr 目录下,最后的完整目录应该是这样 apache-tomcat-6.0.37\webapps\solr\solr  
  5. 修改 apache-tomcat-6.0.37\conf 目录下 server.xml 的编码,增加 URIEncoding="UTF-8"
    [html] view plaincopy
    1. <Connector port="8080" protocol="HTTP/1.1"   
    2.                connectionTimeout="20000"   
    3.                redirectPort="8443" URIEncoding="UTF-8" />  
  6. 启动tomcat,访问 http://localhost:8080/solr/admin/ 即可进入solr管理页面
三、增加ikanalyzer中文分词器
  1. 解压 IKAnalyzer3.2.8 bin.zip,将里面的 IKAnalyzer3.2.8.jar 放入到 apache-tomcat-6.0.37\webapps\solr\WEB-INF\lib 目录下;
  2. 进入apache-tomcat-6.0.37\webapps\solr\solr\conf 目录,在 schema.xml 中增加如下内容:
[html] view plaincopy
  1. <!-- IKAnalyzer 中文分词-->  
  2. <fieldType name="text_ik" class="solr.TextField">  
  3.     <analyzer type="index" positionIncrementGap="100" autoGeneratePhraseQueries="true">  
  4.         <tokenizer class="org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLength="false"/>  
  5.         <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />  
  6.         <filter class="solr.LowerCaseFilterFactory"/>  
  7.     </analyzer>  
  8.     <analyzer type="query">  
  9.         <tokenizer class="org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLength="true" />  
  10.         <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />  
  11.         <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>  
  12.         <filter class="solr.LowerCaseFilterFactory"/>  
  13.     </analyzer>  
  14. </fieldType>  

四、solr使用配置
  • 以下测试的Document中增加了2个新的Field(desc和address),需要在 apache-tomcat-6.0.37\webapps\solr\solr\conf 目录下的schema.xml中增加如下内容:
[html] view plaincopy
  1. <field name="desc" type="text_ik" indexed="true" stored="true" />   
  2. <field name="address" type="text_ik" indexed="true" stored="true" multiValued="true" />  
  3. <!-- 设置查询的default value,方便查询时无需输入*:条件 -->  
  4. <field name="all_info" type="text_ik" indexed="true" stored="false" multiValued="true" />  
[html] view plaincopy
  1. <copyField source="name" dest="all_info" />  
  2. <copyField source="desc" dest="all_info" />  
  3. <copyField source="address" dest="all_info" />  
  • 修改apache-tomcat-6.0.37\webapps\solr\solr\conf 目录下的 solrconfig.xml 文件,修改查询的default value,将“df”修改为前面定义的"all_info":
[html] view plaincopy
  1. <requestHandler name="/select" class="solr.SearchHandler">  
  2.   <!-- default values for query parameters can be specified, these  
  3.        will be overridden by parameters in the request  
  4.     -->  
  5.    <lst name="defaults">  
  6.      <str name="echoParams">explicit</str>  
  7.      <int name="rows">10</int>  
  8.      <str name="df">all_info</str>  
  9.    </lst>  
五、Java示例
执行如下代码需要的jar包的maven配置如下:
[html] view plaincopy
  1.  <dependency>  
  2.   <groupId>commons-logging</groupId>  
  3.   <artifactId>commons-logging</artifactId>  
  4.   <version>1.1.3</version>  
  5. </dependency>  
  6.   
  7. <dependency>  
  8.   <groupId>org.apache.solr</groupId>  
  9.   <artifactId>solr-solrj</artifactId>  
  10.   <version>3.6.2</version>  
  11. </dependency>  
  12.   
  13. <dependency>  
  14.     <groupId>org.apache.httpcomponents</groupId>  
  15.     <artifactId>httpclient</artifactId>  
  16.     <version>4.1.3</version>  
  17. </dependency>  
  18.   
  19. <dependency>  
  20.     <groupId>org.apache.httpcomponents</groupId>  
  21.     <artifactId>httpclient-cache</artifactId>  
  22.     <version>4.1.3</version>  
  23. </dependency>  
  24.   
  25. <dependency>  
  26.     <groupId>org.apache.httpcomponents</groupId>  
  27.     <artifactId>httpcore</artifactId>  
  28.     <version>4.1.3</version>  
  29. </dependency>  
  30.   
  31. <dependency>  
  32.     <groupId>org.apache.httpcomponents</groupId>  
  33.     <artifactId>httpmime</artifactId>  
  34.     <version>4.1.3</version>  
  35. </dependency>  

  • SolrTest.java
[java] view plaincopy
  1. package com.solr;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.Collection;  
  5.   
  6. import org.apache.solr.client.solrj.SolrQuery;  
  7. import org.apache.solr.client.solrj.SolrServer;  
  8. import org.apache.solr.client.solrj.impl.HttpSolrServer;  
  9. import org.apache.solr.client.solrj.response.QueryResponse;  
  10. import org.apache.solr.client.solrj.response.UpdateResponse;  
  11. import org.apache.solr.common.SolrDocument;  
  12. import org.apache.solr.common.SolrDocumentList;  
  13. import org.apache.solr.common.SolrInputDocument;  
  14. import org.apache.solr.common.params.SolrParams;  
  15. import org.junit.After;  
  16. import org.junit.Before;  
  17. import org.junit.Test;  
  18.   
  19. import com.beans.Index;  
  20.   
  21. public class SolrTest {  
  22.   
  23.     private SolrServer server;  
  24.   
  25.     private static final String DEFAULT_URL = "http://localhost:8080/solr/";  
  26.   
  27.     @Before  
  28.     public void init() {  
  29.         try {  
  30.             server = new HttpSolrServer(DEFAULT_URL);  
  31.         } catch (Exception e) {  
  32.             e.printStackTrace();  
  33.         }  
  34.     }  
  35.   
  36.     @After  
  37.     public void destory() {  
  38.         server = null;  
  39.     }  
  40.   
  41.     public final void print(Object o) {  
  42.         System.out.println(o);  
  43.     }  
  44.   
  45.     @Test  
  46.     /** 
  47.      * 验证服务是否正常 
  48.      */  
  49.     public void server() {  
  50.         print(server);  
  51.     }  
  52.   
  53.     @Test  
  54.     /** 
  55.      * 查询 
  56.      */  
  57.     public void query() {  
  58.         String query = "华星路";  
  59.   
  60.         SolrParams params = new SolrQuery(query);  
  61.         try {  
  62.             QueryResponse response = server.query(params);  
  63.   
  64.             SolrDocumentList list = response.getResults();  
  65.             for (SolrDocument sd : list) {  
  66.                 print(sd);  
  67.             }  
  68.         } catch (Exception e) {  
  69.             e.printStackTrace();  
  70.         }  
  71.     }  
  72.   
  73.     @Test  
  74.     public void queryCase() {  
  75.         SolrQuery params = new SolrQuery();  
  76.         params.setQuery("华星路");  
  77.   
  78.         // 设置高亮  
  79.         params.setHighlight(true);  
  80.         params.addHighlightField("address");  
  81.         params.setHighlightSimplePre("<font color='red'>");  
  82.         params.setHighlightSimplePost("</font>");  
  83.         params.setHighlightFragsize(2000);  
  84.   
  85.         try {  
  86.             QueryResponse response = server.query(params);  
  87.             SolrDocumentList list = response.getResults();  
  88.             for (SolrDocument sd : list) {  
  89.                 String id = (String) sd.getFieldValue("id");  
  90.                 if (response.getHighlighting().get(id) != null) {  
  91.                     print(response.getHighlighting().get(id).get("address"));  
  92.                 }  
  93.             }  
  94.         } catch (Exception e) {  
  95.             e.printStackTrace();  
  96.         }  
  97.     }  
  98.   
  99.     @Test  
  100.     /** 
  101.      * 添加Document 
  102.      */  
  103.     public void addDoc() {  
  104.         SolrInputDocument doc = new SolrInputDocument();  
  105.         doc.addField("id"1);  
  106.         doc.addField("name""张三");  
  107.         doc.addField("desc""我就是张三的张,张三的三");  
  108.         doc.addField("address"new String[] { "浙江杭州市西湖区华星路99号创业大厦1楼",  
  109.                 "上海市长宁区天山西路123号" });  
  110.   
  111.         try {  
  112.             UpdateResponse response = server.add(doc);  
  113.             server.commit();  
  114.             print(response);  
  115.         } catch (Exception e) {  
  116.             e.printStackTrace();  
  117.         }  
  118.     }  
  119.   
  120.     /** 
  121.      * 批量添加Document 
  122.      */  
  123.     @Test  
  124.     public void addDocs() {  
  125.         Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();  
  126.   
  127.         SolrInputDocument doc1 = new SolrInputDocument();  
  128.         doc1.addField("id"2);  
  129.         doc1.addField("name""李四");  
  130.         doc1.addField("desc""我就是李四的李,李四的四");  
  131.         doc1.addField("address"new String[] { "浙江杭州市西湖区华星路86号",  
  132.                 "云南省大理市ABC路81号" });  
  133.         docs.add(doc1);  
  134.   
  135.         SolrInputDocument doc2 = new SolrInputDocument();  
  136.         doc2.addField("id"3);  
  137.         doc2.addField("name""王五");  
  138.         doc2.addField("desc""我就是王五的王,王五的五");  
  139.         doc2.addField("address",  
  140.                 new String[] { "浙江宁波市华星路16号""新疆省乌鲁木齐市XX路64号" });  
  141.         docs.add(doc2);  
  142.   
  143.         try {  
  144.             UpdateResponse response = server.add(docs);  
  145.             server.commit();  
  146.             print(response);  
  147.         } catch (Exception e) {  
  148.             e.printStackTrace();  
  149.         }  
  150.     }  
  151.   
  152.     /** 
  153.      * 删除所有Document 
  154.      */  
  155.     @Test  
  156.     public void deleteAllDoc() {  
  157.         try {  
  158.             UpdateResponse response = server.deleteByQuery("*:*");  
  159.             server.commit();  
  160.             print(response);  
  161.         } catch (Exception e) {  
  162.             e.printStackTrace();  
  163.         }  
  164.     }  
  165.   
  166.     /** 
  167.      * 根据ID删除Document 
  168.      */  
  169.     @Test  
  170.     public void deleteById() {  
  171.         try {  
  172.             UpdateResponse response = server.deleteById("1");  
  173.             server.commit();  
  174.             print(response);  
  175.         } catch (Exception e) {  
  176.             e.printStackTrace();  
  177.         }  
  178.     }  
  179.   
  180.     /** 
  181.      * 添加JavaEntity Bean 
  182.      */  
  183.     @Test  
  184.     public void addBean() {  
  185.         Index index = new Index();  
  186.         index.setId("4");  
  187.         index.setName("赵六");  
  188.         index.setDesc("赵国的小六子");  
  189.         index.setAddress(new String[] { "杭州市西湖区""杭州市上城区""杭州市下城区" });  
  190.   
  191.         try {  
  192.             UpdateResponse response = server.addBean(index);  
  193.             server.commit();  
  194.             print(response);  
  195.         } catch (Exception e) {  
  196.             e.printStackTrace();  
  197.         }  
  198.     }  
  199.   
  200. }  
  • Index.java
[java] view plaincopy
  1. package com.beans;  
  2.   
  3. import org.apache.solr.client.solrj.beans.Field;  
  4.   
  5. public class Index {  
  6.   
  7.     @Field  
  8.     private String id;  
  9.     @Field  
  10.     private String name;  
  11.     @Field  
  12.     private String desc;  
  13.     @Field  
  14.     private String[] address;  
  15.   
  16.     public String getId() {  
  17.         return id;  
  18.     }  
  19.   
  20.     public void setId(String id) {  
  21.         this.id = id;  
  22.     }  
  23.   
  24.     public String getName() {  
  25.         return name;  
  26.     }  
  27.   
  28.     public void setName(String name) {  
  29.         this.name = name;  
  30.     }  
  31.   
  32.     public String getDesc() {  
  33.         return desc;  
  34.     }  
  35.   
  36.     public void setDesc(String desc) {  
  37.         this.desc = desc;  
  38.     }  
  39.   
  40.     public String[] getAddress() {  
  41.         return address;  
  42.     }  
  43.   
  44.     public void setAddress(String[] address) {  
  45.         this.address = address;  
  46.     }  
  47. }  

六、luke使用
  1. 进入lukeall-3.5.0.jar的目录,执行【java -jar lukeall-3.5.0.jar】命令
  2. 打开solr 的索引文件所在目录 apache-tomcat-6.0.37\webapps\solr\solr\data\index,即可查看索引的详细情况
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值