环境:
- windows
- solr3.6.2下载:http://www.apache.org/dyn/closer.cgi/lucene/solr/3.6.2
- apache-tomcat-6.0.37下载:http://tomcat.apache.org/download-60.cgi#6.0.37
- ikanalyzer中文分词器下载:https://code.google.com/p/ik-analyzer/downloads/detail?name=IKAnalyzer3.2.8%20bin.zip
- luke3.5.0下载(可选):https://code.google.com/p/luke/downloads/detail?name=lukeall-3.5.0.jar
一、下载上述文件
二、tomcat发布solr配置
- 进入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>
- 将下载的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。
- 启动tomcat,系统会自动将 solr.war 进行解压,你会发现在 webapps 目录下面多了一个 solr的文件夹,然后停止tomcat服务,删除solr.war。
- 进入apache-solr-3.6.2\example 目录,将里面的solr文件夹复制到 apache-tomcat-6.0.37\webapps\solr 目录下,最后的完整目录应该是这样 apache-tomcat-6.0.37\webapps\solr\solr
- 修改 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" />
- 启动tomcat,访问 http://localhost:8080/solr/admin/ 即可进入solr管理页面
三、增加ikanalyzer中文分词器
- 解压 IKAnalyzer3.2.8 bin.zip,将里面的 IKAnalyzer3.2.8.jar 放入到 apache-tomcat-6.0.37\webapps\solr\WEB-INF\lib 目录下;
- 进入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/";
- @Before
- public void init() {
- try {
- server = new HttpSolrServer(DEFAULT_URL);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- @After
- public 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();
- }
- }
- @Test
- public 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
- */
- @Test
- public 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
- */
- @Test
- public void deleteAllDoc() {
- try {
- UpdateResponse response = server.deleteByQuery("*:*");
- server.commit();
- print(response);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * 根据ID删除Document
- */
- @Test
- public void deleteById() {
- try {
- UpdateResponse response = server.deleteById("1");
- server.commit();
- print(response);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * 添加JavaEntity Bean
- */
- @Test
- public 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 {
- @Field
- private String id;
- @Field
- private String name;
- @Field
- private String desc;
- @Field
- private 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使用
- 进入lukeall-3.5.0.jar的目录,执行【java -jar lukeall-3.5.0.jar】命令
- 打开solr 的索引文件所在目录 apache-tomcat-6.0.37\webapps\solr\solr\data\index,即可查看索引的详细情况
本文介绍了如何在Windows环境下安装并配置Apache Solr、IK分词器,以及提供了Java示例代码,用于演示Solr的使用方法。包括下载并部署组件、配置Tomcat、添加中文分词器、Solr使用配置、Java示例代码等步骤。
134

被折叠的 条评论
为什么被折叠?



