簡介:
solr是基於Lucene Java搜索庫的企業級全文搜索引擎,目前是apache的一個項目。它的官方網址在http://lucene.apache.org/solr/ 。solr需要運行在一個servlet 容器里,例如tomcat。solr在lucene的上層提供了一個基於HTTP/XML的Web Services,我們的應用需要通過這個服務與solr進行交互。
前提,下載tomcat。省略。
第一步:下載Solr, http://www.apache.org/dyn/closer.cgi/lucene/solr/
我下載的是3.5版本,把它解壓到E盤。E:/apache-solr-3.5.0
第二步:修改conf\server.xml,把8080端口所在的那一行修改如下:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>
也有用下面這個的。
<Connector port="8080" URLEncoder="UTF-8" redirectPort="8443" connectionTimeout="20000" protocol="HTTP/1.1"/>
其實就是增加了URIEncoding="UTF-8"這一配置。推薦用第一種,這兩個區別暫時不知。
第三步:配置Solr
還是在conf目錄下,增加 Catalina\localhost\solr.xml 文件,如果conf文件夾下沒有Catalina,新建它。
solr.xml內容:
<Context docBase="E:/apache-solr-3.5.0/dist/apache-solr-3.5.0.war" debug="0" crossContext="true" >
<Environment name="solr/home" type="java.lang.String" value="E:/apache-solr-3.5.0/example/solr" override="true" /></Context>
第四步:啟動Tomcat。輸入http://localhost:8080/solr/ 出現歡迎界面,表示成功。
第五步:簡單Java Api 操作
參考 http://www.iteye.com/topic/315330 寫的很詳細了。
一個簡單的寫入,讀出數據的完整代碼如下:
package com.weishangye.test.solr;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
public class SolrTest1 {
public static void main(String[] args) throws Exception {
String url = "http://localhost:8080/solr";
SolrServer server = new CommonsHttpSolrServer(url);
server.deleteByQuery( "*:*" );// delete everything!
SolrInputDocument doc1 = new SolrInputDocument();
doc1.addField( "id", "id1", 1.0f );
doc1.addField( "name", "doc1", 1.0f );
doc1.addField( "price", 10 );
SolrInputDocument doc2 = new SolrInputDocument();
doc2.addField( "id", "id2", 1.0f );
doc2.addField( "name", "冰羽", 1.0f );
doc2.addField( "price", 20 );
Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
docs.add( doc1 );
docs.add( doc2 );
server.add( docs );
server.commit();
SolrQuery query = new SolrQuery();
query.setQuery( "*:*" );
query.addSortField( "price", SolrQuery.ORDER.desc );
QueryResponse rsp = server.query( query );
SolrDocumentList docsList = rsp.getResults();
for(Iterator<SolrDocument> doc =docsList.iterator();doc.hasNext();){
SolrDocument d = doc.next();
System.out.print(d.getFieldValue("id")+"->");
System.out.println(d.getFieldValue("name"));
}
}
}
資源:
http://www.oschina.net/question/12_9398 利用開源的 Apache Solr 搜索引擎構建 RESTful 基礎存儲服務