簡介
Solr是一個獨立的企業級搜尋應用伺服器,它對外提供類似Web-service的API介面。
使用者可以通過HTTP的POST請求,向Solr伺服器提交一定格式的XML或者JSON檔案,Solr伺服器解析檔案之後,根據具體需求對索引庫執行增刪改操作
使用者可以通過HTTP的GET請求,向Solr伺服器發送搜尋請求,並得到XML/JSON格式的返回結果。
Solr是Apache下的一個頂級開源項目,採用java開發,基於Lucene。Solr可以獨立運行在Jetty(java開發的,輕量級的)、Tomcat等這些Servlet容器中。
Solr提供了比Lucene更為豐富的查詢語言,同時實現了可配置、可擴充,並對索引、搜尋效能進行了最佳化。
solr和Lucene區別 Lucene是一個開放原始碼的全文檢索索引引擎工具包,它不是一個完整的全文檢索索引應用。Lucene僅提供了完整的查詢引擎和索引引擎,目的是為軟體開發人員提供一個簡單易用的工具包,以方便的在目標系統中實現全文檢索索引的功能,或者以Lucene為基礎構建全文檢索索引應用。
Solr的目標是打造一款企業級的搜尋引擎系統,它是基於Lucene一個搜尋引擎伺服器,可以獨立運行,通過Solr可以非常快速的構建企業的搜尋引擎,通過Solr也可以高效的完成站內搜尋功能。
solr目錄詳解
bin:solr的運行指令碼 contrib:solr擴充jar包,用於增強solr的功能 dist:該目錄包含build過程中產生的war和jar檔案,以及相關的依賴檔案 docs:solr的API檔案
example:solr工程的例子目錄:
l example/solr:
該目錄是一個標準的SolrHome,它包含一個預設的SolrCore
l example/multicore:
該目錄包含了在Solr的multicore中設定的多個Core目錄。
l example/webapps:
該目錄中包括一個solr.war,該war可作為solr的運行執行個體工程。
licenses:solr相關的一些許可資訊
solrHome和solrCore solrHome是Solr伺服器啟動並執行主目錄,該目錄中包括了多個SolrCore目錄 solrCore是collection1目錄,該目錄中包含搜尋和索引時需要的設定檔和資料檔案(比如索引庫檔案),每個solrCore都可以提供單獨的搜尋和索引服務
SolrCore目錄:
在solr解壓包下solr-4.10.3\example\solr檔案夾就是一個標準的SolrHome,只需要將它複製到指定的目錄下即可,該SolrHome中預設有個名稱為collection1的SolrCore。 配置SolrCore
其實就是配置SolrCore目錄下的conf/solrconfig.xml。
這個檔案是來配置SolrCore執行個體的相關運行時資訊。如果使用預設配置可以不用做任何修改。該設定檔中包含了不少標籤,但是我們經常使用的標籤有:lib標籤、datadir標籤、requestHandler標籤。 lib標籤 lib標籤可以配置擴充功能的一些jar,用以增強solr本身沒有的功能。
比如solr自身沒有『資料匯入索引庫』功能,如果需要使用,則首先要把這些jar複製到指定的目錄,然後通過該設定檔進行相關配置
datadir標籤 dataDir資料目錄data。data目錄用來存放索引檔案和tlog記錄檔。
requestHandler標籤 requestHandler要求處理常式,定義了索引和搜尋的訪問方式。
通過/update維護索引,可以完成索引的添加、修改、刪除操作。
通過/select搜尋索引。
設定搜尋參數完成搜尋,搜尋參數也可以設定一些預設值,如下:
<requestHandler name="/select" class="solr.SearchHandler"> <!-- 設定預設的參數值,可以在請求地址中修改這些參數--> <lst name="defaults"> <str name="echoParams">explicit</str> <int name="rows">10</int><!--顯示數量--> <str name="wt">json</str><!--顯示格式--> <str name="df">text</str><!--預設搜尋欄位--> </lst></requestHandler>
找到solr.war,放到tomcat的webapps下,然後開啟設定檔web.xml,配置solr包裡面的SolrHome
<env-entry> <env-entry-name>solr/home</env-entry-name> <env-entry-value>F:\solr</env-entry-value> <env-entry-type>java.lang.String</env-entry-type> </env-entry>
注意把ext擴充包也匯入,一共50個包。運行tomcat
管理介面功能介紹
Dashboard 儀錶盤,顯示了該Solr執行個體開始啟動啟動並執行時間、版本、系統資源等資訊
Logging Solr作業記錄資訊
Cloud SolrCloud,Solr雲(叢集),當使用Solr Colud模式運行時會顯示此菜單。
Core Admin Solr Core管理介面,在這裡可以添加SolrCore執行個體,不過瀏覽器端有bug,不推薦使用
java properties Solr在jvm運行環境中的屬性資訊,類路徑,檔案編碼啊啥的。
Thead Dump 顯示Solr Server中當前活躍線程資訊,同時也可以跟蹤線程運行棧資訊。
Core selector 選擇一個SolrCore進行詳細操作
Analysis 通過此介面可以測試索引分析器和搜尋分析器的執行情況
dataimport 可以定義資料匯入處理器,從關聯式資料庫將資料匯入到solr索引庫,預設是沒配置的,需要手動設定
Document
通過/update表示更新索引,solr預設根據id(唯一約束)域來更新Document的內容,如果根據id值搜尋不到id域則會執行添加操作,如果找到則更新。
通過此菜單可以建立索引、更新索引、刪除索引等操作,介面如下:
overwrite="true" : solr在做索引的時候,如果文檔已經存在,就用xml中的文檔進行替換
commitWithin="1000" : solr 在做索引的時候,每隔1000(1秒)毫秒,做一次文檔提交。為了方便測試也可以在Document中立即提交,</doc>後添加“<commit/>”
query t通過/select執行搜尋索引,必須指定“q”查詢條件
Solrj
什麼是Solrj Solrj是訪問solr服務的java用戶端,提供索引和搜尋的API方法
public class CreateIndexTest {// solr伺服器的基礎URL路徑private String baseURL = "http://localhost:8080/solr/";// HttpSolrServer對象,該對象負責與遠端solr伺服器進行互動private HttpSolrServer solrServer = new HttpSolrServer(baseURL);@Testpublic void testCreateAndUpdateIndex() throws Exception {SolrInputDocument doc = new SolrInputDocument();doc.addField("id", "c001");doc.addField("content", "測試solrj添加操作02");// 調用SolrServer的API完成索引庫的增刪改查操作solrServer.add(doc);// 提交solrServer.commit();}@Testpublic void testDeleteIndex() throws Exception {// 根據ID刪除// solrServer.deleteById("c001");// 根據查詢對象刪除solrServer.deleteByQuery("id:change.me");// 刪除所有solrServer.deleteByQuery("*:*");// 提交solrServer.commit();}}