solr3.6.2 使用配置

来源:互联网 发布:winpe工具箱代网络 编辑:程序博客网 时间:2024/06/08 07:33

环境:

  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 ,内容如下:
    <?xml version="1.0" encoding="utf-8"?><Context docBase="D:\apache-tomcat-6.0.37\webapps\solr" reloadable="true" >    <Environment name="solr/home" type="java.lang.String" value="D:\apache-tomcat-6.0.37\webapps\solr\solr" override="true" />    </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"
    <Connector port="8080" protocol="HTTP/1.1"                connectionTimeout="20000"                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 中增加如下内容:
<!-- IKAnalyzer 中文分词--><fieldType name="text_ik" class="solr.TextField"><analyzer type="index" positionIncrementGap="100" autoGeneratePhraseQueries="true"><tokenizer class="org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLength="false"/><filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /><filter class="solr.LowerCaseFilterFactory"/></analyzer><analyzer type="query"><tokenizer class="org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLength="true" /><filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /><filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/><filter class="solr.LowerCaseFilterFactory"/></analyzer></fieldType>

四、solr使用配置
  • 以下测试的Document中增加了2个新的Field(desc和address),需要在 apache-tomcat-6.0.37\webapps\solr\solr\conf 目录下的schema.xml中增加如下内容:
   <field name="desc" type="text_ik" indexed="true" stored="true" />    <field name="address" type="text_ik" indexed="true" stored="true" multiValued="true" />   <!-- 设置查询的default value,方便查询时无需输入*:条件 -->   <field name="all_info" type="text_ik" indexed="true" stored="false" multiValued="true" />
   <copyField source="name" dest="all_info" />   <copyField source="desc" dest="all_info" />   <copyField source="address" dest="all_info" />
  • 修改apache-tomcat-6.0.37\webapps\solr\solr\conf 目录下的 solrconfig.xml 文件,修改查询的default value,将“df”修改为前面定义的"all_info":
  <requestHandler name="/select" class="solr.SearchHandler">    <!-- default values for query parameters can be specified, these         will be overridden by parameters in the request      -->     <lst name="defaults">       <str name="echoParams">explicit</str>       <int name="rows">10</int>       <str name="df">all_info</str>     </lst>
五、Java示例
执行如下代码需要的jar包的maven配置如下:
  <dependency>  <groupId>commons-logging</groupId>  <artifactId>commons-logging</artifactId>  <version>1.1.3</version></dependency><dependency>  <groupId>org.apache.solr</groupId>  <artifactId>solr-solrj</artifactId>  <version>3.6.2</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.1.3</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient-cache</artifactId><version>4.1.3</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpcore</artifactId><version>4.1.3</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpmime</artifactId><version>4.1.3</version></dependency>

  • SolrTest.java
package com.solr;import java.util.ArrayList;import java.util.Collection;import org.apache.solr.client.solrj.SolrQuery;import org.apache.solr.client.solrj.SolrServer;import org.apache.solr.client.solrj.impl.HttpSolrServer;import org.apache.solr.client.solrj.response.QueryResponse;import org.apache.solr.client.solrj.response.UpdateResponse;import org.apache.solr.common.SolrDocument;import org.apache.solr.common.SolrDocumentList;import org.apache.solr.common.SolrInputDocument;import org.apache.solr.common.params.SolrParams;import org.junit.After;import org.junit.Before;import org.junit.Test;import com.beans.Index;public class SolrTest {private SolrServer server;private static final String DEFAULT_URL = "http://localhost:8080/solr/";@Beforepublic void init() {try {server = new HttpSolrServer(DEFAULT_URL);} catch (Exception e) {e.printStackTrace();}}@Afterpublic void destory() {server = null;}public final void print(Object o) {System.out.println(o);}@Test/** * 验证服务是否正常 */public void server() {print(server);}@Test/** * 查询 */public void query() {String query = "华星路";SolrParams params = new SolrQuery(query);try {QueryResponse response = server.query(params);SolrDocumentList list = response.getResults();for (SolrDocument sd : list) {print(sd);}} catch (Exception e) {e.printStackTrace();}}@Testpublic void queryCase() {SolrQuery params = new SolrQuery();params.setQuery("华星路");// 设置高亮params.setHighlight(true);params.addHighlightField("address");params.setHighlightSimplePre("<font color='red'>");params.setHighlightSimplePost("</font>");params.setHighlightFragsize(2000);try {QueryResponse response = server.query(params);SolrDocumentList list = response.getResults();for (SolrDocument sd : list) {String id = (String) sd.getFieldValue("id");if (response.getHighlighting().get(id) != null) {print(response.getHighlighting().get(id).get("address"));}}} catch (Exception e) {e.printStackTrace();}}@Test/** * 添加Document */public void addDoc() {SolrInputDocument doc = new SolrInputDocument();doc.addField("id", 1);doc.addField("name", "张三");doc.addField("desc", "我就是张三的张,张三的三");doc.addField("address", new String[] { "浙江杭州市西湖区华星路99号创业大厦1楼","上海市长宁区天山西路123号" });try {UpdateResponse response = server.add(doc);server.commit();print(response);} catch (Exception e) {e.printStackTrace();}}/** * 批量添加Document */@Testpublic void addDocs() {Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();SolrInputDocument doc1 = new SolrInputDocument();doc1.addField("id", 2);doc1.addField("name", "李四");doc1.addField("desc", "我就是李四的李,李四的四");doc1.addField("address", new String[] { "浙江杭州市西湖区华星路86号","云南省大理市ABC路81号" });docs.add(doc1);SolrInputDocument doc2 = new SolrInputDocument();doc2.addField("id", 3);doc2.addField("name", "王五");doc2.addField("desc", "我就是王五的王,王五的五");doc2.addField("address",new String[] { "浙江宁波市华星路16号", "新疆省乌鲁木齐市XX路64号" });docs.add(doc2);try {UpdateResponse response = server.add(docs);server.commit();print(response);} catch (Exception e) {e.printStackTrace();}}/** * 删除所有Document */@Testpublic void deleteAllDoc() {try {UpdateResponse response = server.deleteByQuery("*:*");server.commit();print(response);} catch (Exception e) {e.printStackTrace();}}/** * 根据ID删除Document */@Testpublic void deleteById() {try {UpdateResponse response = server.deleteById("1");server.commit();print(response);} catch (Exception e) {e.printStackTrace();}}/** * 添加JavaEntity Bean */@Testpublic void addBean() {Index index = new Index();index.setId("4");index.setName("赵六");index.setDesc("赵国的小六子");index.setAddress(new String[] { "杭州市西湖区", "杭州市上城区", "杭州市下城区" });try {UpdateResponse response = server.addBean(index);server.commit();print(response);} catch (Exception e) {e.printStackTrace();}}}
  • Index.java
package com.beans;import org.apache.solr.client.solrj.beans.Field;public class Index {@Fieldprivate String id;@Fieldprivate String name;@Fieldprivate String desc;@Fieldprivate String[] address;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}public String[] getAddress() {return address;}public void setAddress(String[] address) {this.address = address;}}

六、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,即可查看索引的详细情况

原创粉丝点击