Apache solr

搜尋引擎
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 兩種匯入方式
  1. 在 solrconfig.xml 加入 data-config.xml 的對應路徑(檔名可自訂)
    • <requestHandler name="/dataimport">data-config.xml</requestHandler>
  2. 修改 data-config.xml
    • sql query
  3. 修改  schema.xml
    • 指定欄位、主鍵、預設搜尋欄位、空白處置等等...
  4. 到 solr admin
    1. 進入 dataimport
    2. 選擇 full import
    3. 勾選 commit 並 execute
    4. 也可用/solr/show_main-tw(專案名稱)/dataimport?command=status(或full-import)&indent=true&wt=json
  5. 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();
    w
    hile (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 - 查詢語法的版本,建議不使用它,由伺服器指定。
  • 運算元
  1. 「:」 指定欄位查指定值,如返回所有值*:*
  2. 「?」 表示單個任意字元的通配
  3. 「*」 表示多個任意字元的通配(不能在檢索的項開始使用*或者?符號)
  4. 「~」 表示模糊檢索,如檢索拼寫類似於」roam」的項這樣寫:roam~將找到形如foam和roams的單詞;roam~0.8,檢索返回相似度在0.8以上的記錄。
  5. 鄰近檢索,如檢索相隔10個單詞的」apache」和」jakarta」,」jakartaapache」~10
  6. 「^」 控制相關度檢索,如檢索jakarta apache,同時希望去讓」jakarta」的相關度更加好,那麼在其後加上」^」符號和增量值,即jakarta^4 apache
  7. 「AND、||」和
  8. 「OR、&&」或
  9. 「NOT、!、- 」排除(排除操作符不能單獨與項使用構成查詢)
  10. 「+」 必須存在,要求符號「+」后的項必須在文檔相應的域中存在
  11. ( ) 子查詢
  12. [] 包含範圍檢索,如檢索某時間段記錄,包含頭尾,date:[200707 TO 200710]
  13. {} 不包含範圍檢索,如檢索某時間段記錄,不包含頭尾,date:{200707TO 200710}
  14. \ 跳脫字元,特殊字元包括+ - && || ! ( ) { } [ ] ^ 」 ~ * ? :\

  •  註:範圍檢索欄位只適用於:String,int,dobule,date不能用於long型的欄位
參考
http://www.mindomo.com/mindmap/solr-e77fb084671747f583b8e88d10d322ff
MindMap
Apache solr Apache solr Reviewed by Wild on 4/22/2014 04:56:00 下午 Rating: 5

沒有留言:

沒有Google帳號也可發表意見唷!

技術提供:Blogger.