原文:www.cnblogs.com/peaceliu/p/… Solr是一個高性能,採用Java5開發,基於Lucene-倒排索引的全文搜索服務器。 同時實現了可配置、可擴展並對查詢性能進行了優化,而且提供了一個完善的功能管理界面,是一款很是優秀的全文搜索引擎. 全文搜索引擎:計算機索引程序經過掃描文章中的每個詞,對每個詞創建一個索引,指明該詞在文章中出現的次數和位置。html
Solr能夠獨立運行,運行在Jetty、Tomcat等這些Servlet容器中,Solr 索引的實現方法很簡單,用 HTTP POST 方法向 Solr 服務器發送一個描述 Field 及其內容的 XML 文檔,Solr根據xml文檔添加、刪除、更新索引 。Solr 搜索只須要發送 HTTP GET 請求,**而後對 Solr 返回Xml、json等格式的查詢結果進行解析,組織頁面佈局。**Solr不提供構建UI的功能,Solr提供了一個管理界面,經過管理界面能夠查詢Solr的配置和運行狀況。程序員
優勢: 一、solr是將整個索引操做功能封裝好了的搜索引擎系統(企業級搜索引擎產品) 二、solr能夠部署到單獨的服務器上(WEB服務),它能夠提供服務,咱們的業務系統就只要發送請求,接收響應便可,下降了業務系統的負載 三、solr部署在專門的服務器上,它的索引庫就不會受業務系統服務器存儲空間的限制 四、solr支持分佈式集羣,索引服務的容量和能力能夠線性擴展json
Solr能夠獨立運行,運行在Jetty、Tomcat等這些Servlet容器中,Solr 索引的實現方法很簡單,用 POST 方法向 Solr 服務器發送一個描述 Field 及其內容的 XML 文檔,Solr根據xml文檔添加、刪除、更新索引 。Solr 搜索只須要發送 HTTP GET 請求,而後對 Solr 返回Xml、json等格式的查詢結果進行解析,組織頁面佈局。Solr不提供構建UI的功能,Solr提供了一個管理界面,經過管理界面能夠查詢Solr的配置和運行狀況。bash
Lucene的工做原理: 索引數據的建立 從原始文件中提取一些能夠用來搜索的數據(封裝成各類Field),把各field再封裝成document,而後對document進行分析(對各字段分詞),獲得一些索引目錄寫入索引庫,document自己也會被寫入一個文檔信息庫;服務器
比較通用的一箇中文分詞器IKAnalyzer分佈式
站內搜索技術選型 一、Lucene:能夠實現站內搜索。須要大量的開發工做。索引庫的維護及優化。查詢的優化等問題都須要咱們本身來解決。不推薦使用。 二、使用第三方搜素引擎實現。使用百度實現站內搜索。免費的。索引庫沒法維護。適合一些小的網站。不推薦使用。 三、Solr:基於Solr實現站內搜索擴展性較好而且能夠減小程序員的工做量,由於Solr提供了較爲完備的搜索引擎解決方案,所以在門戶、論壇等系統中經常使用此方案。提供了完整的集羣方案,和索引庫優化方案。佈局
應用: 1.添加:性能
SolrServer server = new HttpSolrServer("http://localhost:8080/solr");
//建立文檔對象
SolrInputDocument document = new SolrInputDocument();
//添加域
document.addField("id", "num001");
document.addField("title_ik", "巧手DIY彩簾");
//把document對象寫入索引庫
server.add(document);
//提交修改
server.commit();
複製代碼
2.刪除優化
SolrServer server = new HttpSolrServer("http://localhost:8080/solr");
//刪除文檔
server.deleteById("num001");
//根據查詢條件刪除
//server.deleteByQuery("*:*");
//提交修改
server.commit();
複製代碼
3.查詢網站
SolrServer server = new HttpSolrServer("http://localhost:8080/solr");
//建立一個查詢對象
SolrQuery query = new SolrQuery();
//添加查詢條件
//query.setQuery("*:*");
query.set("q", "*:*");
//執行查詢
QueryResponse response = server.query(query);
//取文檔列表
SolrDocumentList solrDocumentList = response.getResults();
System.out.println("查詢結果的總數量:" + solrDocumentList.getNumFound());
//遍歷列表
for (SolrDocument solrDocument : solrDocumentList) {
System.out.println(solrDocument.get("id"));
System.out.println(solrDocument.get("product_name"));
System.out.println(solrDocument.get("product_price"));
}
複製代碼