基于Solr實現(xiàn)站內搜索擴展性較好并且可以減少程序員的工作量,因為Solr提供了較為完備的搜索引擎解決方案,因此在門戶、論壇等系統(tǒng)中常用此方案。
Solr 是Apache下的一個頂級開源項目,采用Java開發(fā),它是基于Lucene的全文搜索服務器。Solr提供了比Lucene更為豐富的查詢語言,同時實現(xiàn)了可配置、可擴展,并對索引、搜索性能進行了優(yōu)化
Solr可以獨立運行,運行在Jetty、Tomcat等這些Servlet容器中,Solr 索引的實現(xiàn)方法很簡單,用 POST 方法向 Solr 服務器發(fā)送一個描述 Field 及其內容的 XML 文檔,Solr根據xml文檔添加、刪除、更新索引 。Solr 搜索只需要發(fā)送 HTTP GET 請求,然后對 Solr 返回Xml、json等格式的查詢結果進行解析,組織頁面布局。Solr不提供構建UI的功能,Solr提供了一個管理界面,通過管理界面可以查詢Solr的配置和運行情況。
solr是基于lucene開發(fā)企業(yè)級搜索服務器,實際上就是封裝了lucene。
Solr是一個獨立的企業(yè)級搜索應用服務器,它對外提供類似于Web-service的API接口。用戶可以通過http請求,向搜索引擎服務器提交一定格式的文件,生成索引;也可以通過提出查找請求,并得到返回結果
Solr類似webservice,調用接口,實現(xiàn)增加,修改,刪除,查詢索引庫。
Lucene是一個開放源代碼的全文檢索引擎工具包,它不是一個完整的全文檢索引擎,Lucene提供了完整的查詢引擎和索引引擎,目的是為軟件開發(fā)人員提供一個簡單易用的工具包,以方便的在目標系統(tǒng)中實現(xiàn)全文檢索的功能,或者以Lucene為基礎構建全文檢索引擎。
Solr的目標是打造一款企業(yè)級的搜索引擎系統(tǒng),它是一個搜索引擎服務,可以獨立運行,通過Solr可以非??焖俚臉嫿ㄆ髽I(yè)的搜索引擎,通過Solr也可以高效的完成站內搜索功能。
Solr類似webservice,提供接口,調用接口,發(fā)送一些特點語句,實現(xiàn)增加,刪除,修改,查詢。
從Solr官方網站(http://lucene.apache.org/solr/ )下載Solr4.10.3,根據Solr的運行環(huán)境,Linux下需要下載lucene-4.10.3.tgz,windows下需要下載lucene-4.10.3.zip。
Solr使用指南可參考:https://wiki.apache.org/solr/FrontPage。
下載solr-4.10.3.zip并解壓,解壓后目錄為:
bin:solr的運行腳本
contrib:Solr的一些擴展包,包括分詞器,聚類,語言識別,數據導入處理,非結構化內容分
析等.
dist:該目錄包含build過程中產生的war和jar文件,以及相關的依賴文件。我們之
前使用的solr.war實際上就是這個文件夾下的solr-4.40.war
docs:solr的API文檔
example:solr工程的例子目錄:
l example/solr:
該目錄是一個包含了默認配置信息的Solr的Core目錄。
l example/multicore:
該目錄包含了在Solr的multicore中設置的多個Core目錄。
l example/webapps:
該目錄中包括一個solr.war,該war可作為solr的運行實例工程。
l licenses:solr相關的一些許可信息
Jetty服務器是web容器,類似tomcat。
啟動solr內置jetty服務器流程:
1、 啟動運行example/start.jar
a) 直接在cmd命令行運行命令
b) 使用bat批處理文件運行jar包
2、 加載example/lib下面的jetty服務器
3、 Jetty服務器加載example/webaaps/solr.war項目
4、 加載索引庫倉庫:example/solr
一個core admin(索引倉庫)有多個索引庫collection1,collection2…..
添加第一個索引庫:
導入外部數據。導入mysql數據庫商品數據。
索引庫配置文件拷貝,加載索引庫配置文件。
儀表盤,顯示了該Solr實例開始啟動運行的時間、版本、系統(tǒng)資源、jvm等信息。
Solr運行日志信息
Cloud即SolrCloud,即Solr云(集群),當使用Solr Cloud模式運行時會顯示此菜單,如下圖是Solr Cloud的管理界面:
Solr Core的管理界面。Solr Core 是Solr的一個獨立運行實例單位,它可以對外提供索引和搜索服務,一個Solr工程可以運行多個SolrCore(Solr實例),一個Core對應一個索引目錄。
Solr在JVM 運行環(huán)境中的屬性信息,包括類路徑、文件編碼、jvm內存設置等信息。
顯示Solr Server中當前活躍線程信息,同時也可以跟蹤線程運行棧信息。
選擇一個SolrCore進行詳細操作,如下:
通過此界面可以測試索引分析器和搜索分析器的執(zhí)行情況。
可以定義數據導入處理器,從關系數據庫將數據導入 到Solr索引庫中。
Document(重點)
通過此菜單可以創(chuàng)建索引、更新索引、刪除索引等操作,界面如下:
/update表示更新索引,solr默認根據id(唯一約束)域來更新Document的內容,如果根據id值搜索不到id域則會執(zhí)行添加操作,如果找到則更新。
如果Id存在,修改
如果Id不存在,添加。
Solr 支持系統(tǒng)屬性替換,允許啟動JVM在任一Solr的配置文件指定字符串替換。
語法: ${property[:default value]}
替換是有效的在任何元素或屬性的文本。
這里是允許運行時決定數據目錄的一個例子:
<dataDir>${solr.data.dir:./solr/data}</dataDir> 使用示例應用程序中
solr可以以這種方式啟動:
java -Dsolr.data.dir=/data/dir -jar start.jar 如果沒有指定
solr啟動時讀取 conf/solrcore.properties文件
#solrcore.properties data.dir=/data/solrindex
解析:運行時替換目錄意思
注意:在solrConfig配置文件里面使用${},這是solr語法格式。
簡單解釋一下:
Solr.就代表solrcore索引庫目錄:collection1這一層目錄。
顧名思義:solr.data.dir表示的意思就是collection1下面的data目錄。
這是solr的一種約定,不必深究,知道solr.就是我們的索引庫目錄就ok。
solrj是訪問Solr服務的java客戶端,提供索引和搜索的請求方法,SolrJ通常在嵌入在業(yè)務系統(tǒng)中,通過SolrJ的API接口操作Solr服務
<?xml version="1.0" encoding="UTF-8" ?> <dataConfig> <dataSource name="mysqlServer" type="JdbcDataSource" driver="com.mysql.jdbc.Driver" batchSize="-1" url="jdbc:mysql://192.103.101.110:3306/locationplatform" user="lpuser" password="jlitpassok"/> <document> <entity name="locatedentity" pk="id" query="select id,time from locationplatform.locatedentity where isdelete=0 and my_date > '${dataimporter.last_index_time}'" deletedPkQuery="select id from locationplatform.locatedentity where isdelete=1 and my_date > '${dataimporter.last_index_time}'" deltaQuery="select -1 id" deltaImportQuery="select id,time from locationplatform.locatedentity where isdelete=0 and my_date > '${dataimporter.last_index_time}'"> <field column="id" name="id"/> <field column="time" name="time"/> </entity> </document> </dataConfig> |
<autoCommit> <maxTime>100000(1-10min)</maxTime> <openSearcher>false</openSearcher> </autoCommit> <autoSoftCommit> <maxTime>1000(1s)</maxTime> </autoSoftCommit> |
數據量(W條) | 線程數 | 隊列大小 | 時間(s) | 網絡(MB/s) | 速率(W條/s) |
200 | 20 | 10000 | 88 | 10.0 | 2.27 |
200 | 20 | 20000 | 133 | 9.0 | 1.50 |
200 | 40 | 10000 | 163 | 10.0 | 1.22 |
200 | 50 | 10000 | 113 | 10.5 | 1.76 |
200 | 100 | 10000 | 120 | 10.5 | 1.67 |
數據量(億條) | 字段數 | 字段類型 | 時間(ms) |
1 | 1 | long | 1 |
1 | 1 | double | 80-1400 |
1 | 1 | string | 7-800 |
1 | 1 | date | 2-400 |
1 | 2(OR) | long | 2 |
1 | 2(OR) | double | 200-2400 |
1 | 2(OR) | string | 500-1000 |
1 | 2(OR) | date | 5-500 |
數據量(億條) | 字段數 | 字段類型 | 時間(ms) |
1 | 1 | long | 2000-10000 |
1 | 1 | double | 1000-17000 |
1 | 1 | string | 20-16000 |
1 | 1 | date | / |
1 | 2(OR) | long | 3000-25000 |
1 | 2(OR) | double | 7000-45000 |
1 | 2(OR) | string | 3000-48000 |
1 | 2(OR) | date | / |
數據量(億條) | 字段數 | 字段類型 | 時間(ms) |
1 | 1 | long | 6-46000 |
1 | 1 | double | 80-11000 |
1 | 1 | string | 7-3000 |
1 | 1 | date | 1000-2000 |
1 | 2(OR) | long | 100-13000 |
1 | 2(OR) | double | 100-60000 |
1 | 2(OR) | string | 3000-13000 |
1 | 2(OR) | date | 7000-10000 |
如對本文有疑問,請?zhí)峤坏浇涣髡搲?,廣大熱心網友會為你解答!! 點擊進入論壇