One-Way
爱一人,攀一山,追一梦

Solr

Solr它是一款非常优秀的全文搜索引擎,它是一种开放源码的、基于Lucene的企业级搜索应用服务器。它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。

 

官方网址:http://lucene.apache.org/solr/

官方文档:http://lucene.apache.org/solr/resources.html#documentation

学习参考网站:http://www.solr.cc/blog/

 

Solr is the popular, blazing-fast, open source enterprise search platform built on Apache Lucene.

 

Solr VS Luence

Solr与Lucene并不是竞争对立关系,Solr依存于Lucene,因为Solr底层的核心技术是使用Lucene来实现的;

Solr和Lucene的本质区别有以下三点:搜索服务器,企业级和管理。

Lucene本质上是搜索库,Solr是独立的应用程序。

Lucene专注于搜索底层的建设,而Solr专注于企业应用。

Lucene不负责支撑搜索服务所必须的管理,而Solr支持。

Solr是Lucene面向企业搜索应用的扩展。

 

Tomcat部署

1、 安装tomcat

apache-tomcat-7.0.61.tar.gz

tar -xzvf apache-tomcat-7.0.61.tar.gz -C /usr/

2、 部署solr.war

解压solr-4.9.1.zip文件,找到solr.war文件,位置:solr-4.9.1/example/webapps/solr.war;

将此文件拷贝到tomcat的webapps目录下;

3、 启动tomcat

Tomcat会自动部署solr.war,部署完成后将solr.war文件删除;

查看日志系统会报错误

SEVERE: Error filterStart

解决方法:执行下一步

4、 Copy扩展包

然后将 solr-4.9.1/example/lib/ext目录下的jar包都copy到webapps/solr/WEB-INF/lib目录下;

5、 配置solr home

打开webapps/solr/WEB-INF/web.xml文件

<env-entry>

       <env-entry-name>solr/home</env-entry-name>

       <env-entry-value>/usr/solr</env-entry-value>

       <env-entry-type>java.lang.String</env-entry-type>

 </env-entry>

创建/usr/solr目录,然后将solr-4.9.1/example/solr/文件的内容拷贝到 /usr/solr/目录中。

重启tomcat,可访问solr。

http://ocalhost:8080/solr。

 

不使用tomcat,使用自身集成的web服务

执行命令:solr-4.9.1/example/java -jar start.jar

访问:http://localhost:8983/solr

 

SolrJ

API使用:

官方参考:https://cwiki.apache.org/confluence/display/solr/Using+SolrJ

 1 import org.apache.solr.client.solrj.SolrQuery;
 2         import org.apache.solr.client.solrj.SolrServerException;
 3         import org.apache.solr.client.solrj.impl.HttpSolrServer;
 4         import org.apache.solr.client.solrj.response.QueryResponse;
 5         import org.apache.solr.client.solrj.response.UpdateResponse;
 6         import org.apache.solr.common.SolrDocument;
 7         import org.apache.solr.common.SolrDocumentList;
 8         import org.apache.solr.common.SolrInputDocument;
 9         import org.junit.Before;
10         import org.junit.Test;
11 
12         import java.io.IOException;
13         import java.util.ArrayList;
14         import java.util.List;
15 
16 /**
17  * Created by Edward on 2016/7/27.
18  */
19 public class MyTest {
20 
21     private static final String URL = "http://node1:8080/solr/collection1/";
22     private HttpSolrServer httpSolrServer;
23 
24     @Before
25     public void init(){
26         httpSolrServer = new HttpSolrServer(URL);
27 
28     }
29 
30     @Test
31     public void add() throws IOException, SolrServerException {
32         SolrInputDocument doc1 = new SolrInputDocument();
33         doc1.addField("id","1");
34         doc1.addField("title","了解hadoop概念");
35         doc1.addField("content","了解hadoop概念,这个是内容");
36         SolrInputDocument doc2 = new SolrInputDocument();
37         doc2.addField("id","2");
38         doc2.addField("title","学习查看hadoop文档");
39         doc2.addField("content","学习查看hadoop文档,这个是内容");
40         SolrInputDocument doc3 = new SolrInputDocument();
41         doc3.addField("id","3");
42         doc3.addField("title","搭建hadoop环境");
43         doc3.addField("content","搭建hadoop环境,这个是内容");
44         List<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
45         docs.add(doc1);
46         docs.add(doc2);
47         docs.add(doc3);
48 
49         UpdateResponse response = httpSolrServer.add(docs);
50 
51         System.out.println("Query Time:" + response.getQTime());
52         System.out.println("Elapsed Time:" + response.getElapsedTime());
53         System.out.println("Status:" + response.getStatus());
54 
55         httpSolrServer.commit();
56     }
57 
58     @Test
59     public void query() throws SolrServerException {
60         SolrQuery solrQuery = new SolrQuery();
61         solrQuery.setQuery("hadoop");
62 
63         QueryResponse response = httpSolrServer.query(solrQuery);
64         SolrDocumentList list = response.getResults();
65 
66         for(int i=0; i<list.size(); i++){
67             SolrDocument doc = list.get(i);
68             System.out.println(doc.get("id"));
69             System.out.println(doc.get("title"));
70             System.out.println(doc.get("content"));
71         }
72     }
73 }

 

定义field属性是通过配置文件schema.xml,稍后再做介绍;

包括配置中文分词器等;

 

posted on 2016-07-28 16:02  单行道|  阅读(387)  评论(0编辑  收藏  举报