Apache solr
搜尋引擎
Solr
Apache solr
Solr VS Lucene
Solr 底層的核心技術是使用Apache Lucene 來實現的,簡單的說Solr 是Lucene 的服務器化。需要注意的是Solr 並不是簡單的對Lucene 進行封裝,它所提供的大部分功能都區別於Lucene 。
安裝
Install helper
主要設定文件
DataImport (參考)
完整參數設定說明 (原文)
solr有提供 full-import 和 delta-import 兩種匯入方式
分詞產品(中文)
在 schema.xml 中設定, class="solr.TextField",
目前Lucene 的中文分詞主要有:
自定義詞庫
replication
Cache
在solrconfig.xml中設定
Client
http://www.mindomo.com/mindmap/solr-e77fb084671747f583b8e88d10d322ff
Solr
Apache solr
Solr VS Lucene
Solr 底層的核心技術是使用Apache Lucene 來實現的,簡單的說Solr 是Lucene 的服務器化。需要注意的是Solr 並不是簡單的對Lucene 進行封裝,它所提供的大部分功能都區別於Lucene 。
安裝
Install helper
- /dist/solr-x.x.x.war 為完整的 web應用程式,
解壓縮到 <tomcate>/webapps,
需在 <tomcate>/bin/catalina.bat 指定 solr 路徑,在啟動 - 預設控制台Url
http://localhost:8080/solr
主要設定文件
- /var/lib/tomcat7/conf/Catalina/localhost/solr.xml
- /opt/solr/solr.xml
- /opt/solr/example/conf/solrconfig.xml
- 自訂的 data-config.xml
- schema.xml
- dataimport.properties (看最後一次 data-import 時間 last_index_time)
- 參考
- solrcore_slave.properties:solrcore.properties
- solrconfig.xml
- elevate.xml
- keywords_recommend.txt 建議字
- protwords.txt
- spellings.txt
- stopwords.txt 不允許的字元
- synonyms.txt
DataImport (參考)
完整參數設定說明 (原文)
solr有提供 full-import 和 delta-import 兩種匯入方式
- 在 solrconfig.xml 加入 data-config.xml 的對應路徑(檔名可自訂)
- <requestHandler name="/dataimport">data-config.xml</requestHandler>
- 修改 data-config.xml
- sql query
- 修改 schema.xml
- 指定欄位、主鍵、預設搜尋欄位、空白處置等等...
- 到 solr admin
- 進入 dataimport
- 選擇 full import
- 勾選 commit 並 execute
- 也可用/solr/show_main-tw(專案名稱)/dataimport?command=status(或full-import)&indent=true&wt=json
- dataimport.properties 會重壓時間
- 其他相關參數
- entity
entity是document下面的標籤(data-config.xml)。使用這個參數可以有選擇的執行一個或多個entity。使用多個entity參數可以使得多個entity同時運行。如果不選擇此參數那麼所有的都會被運行。 - clean 執行前先刪除之前的索引。(def=true)
- commit 索引完成之後提交。(def=true)
- optimize 索引完成後對索引進行優化。(def=true)
- debug 是否以debug 模式執行。
- SqlEntityProcessor的屬性
- query (required) :sql語句
- deltaQuery : 只在「增量導入」」中使用
- parentDeltaQuery : 只在「增量導入」中使用
- deletedPkQuery : 只在「增量導入」中使用
- deltaImportQuery : (只在「增量導入」中使用) . 如果這個存在,那麼它將會在「增量導入」中導入phase時代替query產生作用。這裡有一個命名空間的用法${dataimporter.delta.}
分詞產品(中文)
在 schema.xml 中設定, class="solr.TextField",
- charFilter
- tokenizer 分詞器
- filter 過濾器
目前Lucene 的中文分詞主要有:
- paoding :Lucene 中文分詞“庖丁解牛” Paoding Analysis 。
- imdict :imdict 智能詞典所采用的智能中文分詞程序。
- mmseg4j : 用 Chih-Hao Tsai 的 MMSeg 算法 實現的中文分詞器。
- ik-analyzer:采用了特有的“正向迭代最細粒度切分算法“,多子處理器分析模式。
自定義詞庫
- paoding :支持不限制個數的用戶自定義詞庫,純文本格式,一行一詞,使用後台線程檢測詞庫的更新,自動編譯更新過的詞庫到二進制版本,並加載
- imdict :暫時不支持用戶自定義詞庫。但 原版 ICTCLAS 支持。支持用戶自定義 stop words
- mmseg4j :自帶 sogou 詞庫,支持名 wordsxxx.dic為 , utf8 格式的用戶自定義詞庫,一行一詞。不支持自動檢測。 -Dmmseg.dic.path
- ik-analyzer : 支持 api 級的用戶詞庫加載,和配置級的詞庫文件指定,無 BOM 的 UTF-8 編碼, \r\n 分割。不支持自動檢測
replication
Cache
在solrconfig.xml中設定
- class
- solr.LRUCache
- solr.FastLRUCache
- showItems統計頁面Cache。它用於debug。
- minSize屬性(可選)Cache 飽和時,會設法使其下降到minSize屬性。默認值是(0.9 * size)
- solr.LFUCache
- showItems
- timeDecay (def=true)
銷毀策略,每次被使用到則重新開始計時, 則長期沒用,等級會慢慢衰退,直到銷毀。
- size 最大數量
- initalSize 初始高速 cache 中的數量
- autowarmCount 新的搜索器被建立並進行預熱時,此時從舊的搜索器中取出設置數量的內容放入新搜索器。
- maxBooleanClauses 定義可組合在一起形成以個查詢的字句數量的上限
solrCache 類別的實作(參考)
- filterCache
- queryResultCache 對查詢的結果 cache
- documentCache 用來保存<doc_id,document>
- User/Generic Caches 自定義Cache
- The Lucene FieldCache Solr並不對它做管理,由lucene的IndexSearcher來搞
- autowarm 熱機
- 觸發時機
- 創建第一個Searcher時(firstSearcher)
- 一個是創建個新Searcher(newSearcher)
Client
- 將操作 solr 的門檻降低,將參數用物件輸出成 URL
- PHP Solr client library
Solarium 官網 - .NET
solrnet - Java
solrj說明 (可在 solr package 中找到)
String urlString = "http://localhost:8983/solr";
SolrServer solr = new HttpSolrServer(urlString);
SolrQuery query =
new
SolrQuery();
parameters.set(
"q"
, "tags:t5 AND t7");
QueryResponse qr = solr.query(parameters);SolrDocumentList docs = qr.getResults();Iterator it = docs.iterator();
while (it.hasNext()) { System.out.println(it.next());
}//也可用 POJO類 (org.apache.solr.client.solrj.beans.Field)QueryResponse qrsp = solrServer.query(query);List<Item> productIds = qrsp.getBeans(Item.class);
CommonQueryParameters
- q - 查詢字元串(必須)
- fl - 指定返回那些欄位內容,用逗號或空格分隔多個。
- start - 偏移起始位置,0開始,一般分頁用。
- rows - 返回筆數,配合start來實現分頁。
- sort - 排序,格式:sort=<field name>+<desc|asc>[,<field name>+<desc|asc>]… 。
示例:(inStock desc, price asc)表示先 「inStock」 降序, 再 「price」 升序,默認是相關性降序。 - wt - (writer type)指定輸出格式,可以有 xml, json, php, phps
- fq - (filter query)過慮查詢,作用:在q查詢符合結果中同時是fq查詢符合的,例如:q=mm&fq=date_time:[20081001 TO 20091031],找關鍵字mm,並且date_time是20081001到20091031之間的
- indent - 樹狀是否縮起(def=false)
- version - 查詢語法的版本,建議不使用它,由伺服器指定。
- 運算元
- 「:」 指定欄位查指定值,如返回所有值*:*
- 「?」 表示單個任意字元的通配
- 「*」 表示多個任意字元的通配(不能在檢索的項開始使用*或者?符號)
- 「~」 表示模糊檢索,如檢索拼寫類似於」roam」的項這樣寫:roam~將找到形如foam和roams的單詞;roam~0.8,檢索返回相似度在0.8以上的記錄。
- 鄰近檢索,如檢索相隔10個單詞的」apache」和」jakarta」,」jakartaapache」~10
- 「^」 控制相關度檢索,如檢索jakarta apache,同時希望去讓」jakarta」的相關度更加好,那麼在其後加上」^」符號和增量值,即jakarta^4 apache
- 「AND、||」和
- 「OR、&&」或
- 「NOT、!、- 」排除(排除操作符不能單獨與項使用構成查詢)
- 「+」 必須存在,要求符號「+」后的項必須在文檔相應的域中存在
- ( ) 子查詢
- [] 包含範圍檢索,如檢索某時間段記錄,包含頭尾,date:[200707 TO 200710]
- {} 不包含範圍檢索,如檢索某時間段記錄,不包含頭尾,date:{200707TO 200710}
- \ 跳脫字元,特殊字元包括+ - && || ! ( ) { } [ ] ^ 」 ~ * ? :\
- 註:範圍檢索欄位只適用於:String,int,dobule,date不能用於long型的欄位
http://www.mindomo.com/mindmap/solr-e77fb084671747f583b8e88d10d322ff
MindMap |
Apache solr
Reviewed by Wild
on
4/22/2014 04:56:00 下午
Rating:
沒有留言:
沒有Google帳號也可發表意見唷!