五月综合缴情婷婷六月,色94色欧美sute亚洲线路二,日韩制服国产精品一区,色噜噜一区二区三区,香港三级午夜理伦三级三

您現(xiàn)在的位置: 365建站網 > 365文章 > 什么是Solr及為搜索引擎對大數據量創(chuàng)建索引

什么是Solr及為搜索引擎對大數據量創(chuàng)建索引

文章來源:365jz.com     點擊數:570    更新時間:2017-12-05 08:18   參與評論

使用Solr實現(xiàn)

 

基于Solr實現(xiàn)站內搜索擴展性較好并且可以減少程序員的工作量,因為Solr提供了較為完備的搜索引擎解決方案,因此在門戶、論壇等系統(tǒng)中常用此方案。

 

 

什么是Solr

 

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-serviceAPI接口。用戶可以通過http請求,向搜索引擎服務器提交一定格式的文件,生成索引;也可以通過提出查找請求,并得到返回結果

Solr類似webservice,調用接口,實現(xiàn)增加,修改,刪除,查詢索引庫。

 

SolrLucene的區(qū)別

 

Lucene是一個開放源代碼的全文檢索引擎工具包,它不是一個完整的全文檢索引擎,Lucene提供了完整的查詢引擎和索引引擎,目的是為軟件開發(fā)人員提供一個簡單易用的工具包,以方便的在目標系統(tǒng)中實現(xiàn)全文檢索的功能,或者以Lucene為基礎構建全文檢索引擎。

 Solr的目標是打造一款企業(yè)級的搜索引擎系統(tǒng),它是一個搜索引擎服務,可以獨立運行,通過Solr可以非??焖俚臉嫿ㄆ髽I(yè)的搜索引擎,通過Solr也可以高效的完成站內搜索功能。

Solr類似webservice,提供接口,調用接口,發(fā)送一些特點語句,實現(xiàn)增加,刪除,修改,查詢。

solr4.x快速入門

下載

 

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并解壓,解壓后目錄為:

binsolr的運行腳本

contribSolr的一些擴展包,包括分詞器,聚類,語言識別,數據導入處理,非結構化內容分

析等.

dist該目錄包含build過程中產生的warjar文件,以及相關的依賴文件。我們之

前使用的solr.war實際上就是這個文件夾下的solr-4.40.war

docssolrAPI文檔

examplesolr工程的例子目錄:

l example/solr:

該目錄是一個包含了默認配置信息的SolrCore目錄。

l example/multicore

該目錄包含了在Solrmulticore中設置的多個Core目錄。

l example/webapps:

    該目錄中包括一個solr.war,該war可作為solr的運行實例工程。

l licensessolr相關的一些許可信息

2 使用solr內置jetty服務器運行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

 

Solr首頁

 

 

索引倉庫core admin

 

 

索引庫

 

一個core admin索引倉庫)多個索引庫collection1,collection2…..

添加第一個索引庫

 

選擇索引庫

overView

 

 

Analysis

 

 

Dataimport

 

導入外部數據。導入mysql數據庫商品數據。

Documents

 

 

Files

 

索引庫配置文件拷貝,加載索引庫配置文件。

 

Query

 

 

管理界面

 

 

Dashboard

 

儀表盤,顯示了該Solr實例開始啟動運行的時間、版本、系統(tǒng)資源、jvm等信息。

Logging

 

Solr運行日志信息

Cloud:

 

CloudSolrCloud,即Solr云(集群),當使用Solr Cloud模式運行時會顯示此菜單,如下圖是Solr Cloud的管理界面:

 

Core Admin

 

Solr Core的管理界面。Solr Core Solr的一個獨立運行實例單位,它可以對外提供索引和搜索服務,一個Solr工程可以運行多個SolrCoreSolr實例),一個Core對應一個索引目錄。

java properties

 

SolrJVM 運行環(huán)境中的屬性信息,包括類路徑、文件編碼、jvm內存設置等信息。

Tread Dump

 

顯示Solr Server中當前活躍線程信息,同時也可以跟蹤線程運行棧信息。

Core selector

 

選擇一個SolrCore進行詳細操作,如下:

 

Analysis(重點)

 

 

通過此界面可以測試索引分析器和搜索分析器的執(zhí)行情況。

dataimport

 

可以定義數據導入處理器,從關系數據庫將數據導入 Solr索引庫中。

 

 

Document(重點)

 

通過此菜單可以創(chuàng)建索引、更新索引、刪除索引等操作,界面如下:

 

 

 

 

 

/update表示更新索引,solr默認根據id(唯一約束)域來更新Document的內容,如果根據id值搜索不到id域則會執(zhí)行添加操作,如果找到則更新。

 

添加索引庫

 

 

 

 

 

 

修改

 

 

 

 

如果Id,修改

 

如果Id不存在,添加。

 

刪除

 

 

 

 

query(重點)

 

 

System property替換   

 

 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

 

 

什么是SolrJ

 

 

solrj是訪問Solr服務的java客戶端,提供索引和搜索的請求方法,SolrJ通常在嵌入在業(yè)務系統(tǒng)中,通過SolrJAPI接口操作Solr服務


 

在項目中使用Solr作為搜索引擎對大數據量創(chuàng)建索引,提供服務,本文是作者對Solr的使用總結的一點心得體會,

具體包括使用DataImportHandler從數據庫中近實時同步數據、測試Solr創(chuàng)建索引的性能、以及測試Solr的搜索效率總結等。

具體搜索引擎概念、Solr搭建方法、數據庫mysql使用方法,假設讀者已有了基礎。本文操作均是在linux上進行的。 

1.      Solr

1.1  Solr從數據庫中讀取數據并創(chuàng)建索引速度(使用DataImportHandler)

l 一次性創(chuàng)建索引
在JVM內存配置為256M時,建立索引至1572865時出現(xiàn)Java heap異常;增加JVM內存配置至512M,設置系統(tǒng)環(huán)境變量:JAVA_OPTS -Xms256m -Xmx512m,能成功建立2112890條(花費2m 46s)。
平均索引創(chuàng)建速度為:12728/s(兩個string字段,長度大約為20字符)。
l 增量創(chuàng)建索引
注意:近實時增量索引需要寫數據庫服務的時間與搜索引擎服務器時間同步(數據庫服務時間先于搜索引擎服務器時間才行)。
       使用默認的DIH創(chuàng)建增量索引速度較慢(50/s~400/s),不如全索引(1W/s),因為需要從數據庫中讀取多遍(1、要更新的IDs;2、每1ID去數據庫中重取所有列)。
     故需要更改DIH增量索引程序,以全索引的方式讀數據;或采取全讀出的方式,一次全讀出所有列,具體文件配置如下:
 
<?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>
通過這樣的配置可以達到增量索引9000/s(兩個string字段)(數據庫里對時間建立索引,對這里的性能影響不大)。
l  注意:作者不推薦使用DataImportHandler,有其它更好更方便的實現(xiàn)可以使用。
 

1.2  Solr創(chuàng)建索引效率

l ConcurrentUpdateSolrServer使用http方式,embedded方式官方不推薦使用。ConcurrentUpdateSolrServer不需要commit,solrServer.add(doc)即可添加數據。SolrServer solrServer = newConcurrentUpdateSolrServer(solrUrl, 隊列大小, 線程數)其需要與autoCommit、autoSoftCommit配置搭配使用,網上建議配置如下:
<autoCommit>
                 <maxTime>100000(1-10min)</maxTime>
                 <openSearcher>false</openSearcher>
</autoCommit>
<autoSoftCommit>
                 <maxTime>1000(1s)</maxTime>
</autoSoftCommit>
17個各種類型字段(原純文本Size約為200B,SolrInputDocument對象Size約為930B),以只保存ID、每字段均建立索引的方式創(chuàng)建索引。
如需具體的測試代碼可以聯(lián)系本人。
l 17個字段,四核CPU,16G內存,千兆網絡
數據量(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
 
l 速度:Solr創(chuàng)建索引速度與Solr機器CPU正相關,一般情況下CPU占用率能達到接近100%,內存占用率在默認情況下需達到接近100%,網絡、磁盤占用率均小。因此創(chuàng)建索引的效率瓶頸在CPU及內存。當內存占用率維持在接近100%,索引大小達到物理內存大小時,插入新的數據容易出現(xiàn)OOM錯誤,這時需要使用ulimit –v unlimited命令更改virtual memory配置為unlimited再啟動Solr便不會出現(xiàn)OOM錯誤。在64位機器系統(tǒng)上,官方推薦使用MMapDirectory。
l NRTCachingDirectory速度偏慢,會在某一時間索引添加停滯,Size先大后小,減小后索引添加繼續(xù)。
l 大?。?億索引大小約為13-16GB,2億索引大小約為30GB。
 

1.3  Solr搜索方式

l  交集:{name:億度 AND address:海淀} {text:海淀 AND 億度}。
l  聯(lián)集:{name:億度 OR address:海淀} {text:海淀 OR 億度}。
l  排除:{text:海淀 -億度}。
l  通配符:{bank:中國*銀}。
l  范圍:{num:[30 TO60]}。
l  分頁:start rows
l  排序:sort
l  Group 權重中文分詞 ...
 

1.4  億級數據搜索速度

l  本節(jié)測試是基于1.2節(jié)創(chuàng)建的索引上的。
l精確搜索
數據量(億條) 字段數 字段類型 時間(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
 
l 模糊搜索
數據量(億條) 字段數 字段類型 時間(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 /
 
l 范圍搜索
數據量(億條) 字段數 字段類型 時間(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
 
l 結論:
范圍越大,結果數據越多,搜索花費時間越長。
第一次搜索較慢,后來時間花費較少。


如對本文有疑問,請?zhí)峤坏浇涣髡搲?,廣大熱心網友會為你解答!! 點擊進入論壇

發(fā)表評論 (570人查看0條評論)
請自覺遵守互聯(lián)網相關的政策法規(guī),嚴禁發(fā)布色情、暴力、反動的言論。
昵稱:
最新評論
------分隔線----------------------------

其它欄目

· 建站教程
· 365學習

業(yè)務咨詢

· 技術支持
· 服務時間:9:00-18:00
365建站網二維碼

Powered by 365建站網 RSS地圖 HTML地圖

copyright © 2013-2024 版權所有 鄂ICP備17013400號