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,稍后再做介绍;
包括配置中文分词器等;