當前位置:編程學習大全網 - 源碼破解 - 教妳使用solr搭建妳的全文檢索

教妳使用solr搭建妳的全文檢索

 Solr 是壹個可供企業使用的 基於 Lucene 的開箱即用的搜索服務器 對Lucene不熟?那麽建議先看看下面兩篇文檔

 實戰Lucene 第 部分 初識 Lucene lo lucene /

 用Lucene加速Web搜索應用程序的開發 lucene /

  壹 solr介紹

 solr是基於Lucene Java搜索庫的企業級全文搜索引擎 目前是apache的壹個項目 它的官方網址在 solr需要運行在壹個servlet 容器裏 例如tomcat solr在lucene的上層提供了壹個基於HTTP/XML的Web Services 我們的應用需要通過這個服務與solr進行交互

  二 solr安裝和配置

 關於solr的安裝和配置 這裏也有兩篇非常好的文檔 作者同時也是 Lucene Java 項目的提交人和發言人

 使用Apache Solr實現更加靈巧的搜索 solr /l

  solr /l

 下面主要說說需要註意的地方

 Solr的安裝非常簡單 下載solr的zip包後解壓縮將dist目錄下的war文件改名為solr war直接復制到tomcat 的webapps目錄即可 註意壹定要設置solr的主位置 有三種方法 我采用的是在tomcat裏配置java p/env/solr/home的壹個JNDI指向solr的主目錄(example目錄下) 建立/tomcat /conf/Catalina/localhost/solr xml文件

 

 <Context docBase= D:/solr war debug= crossContext= true ><Environment name= solr/home type= java lang String value= D:/solr/solr override= true /></Context>

 觀察這個指定的solr主位置 裏面存在兩個文件夾 conf和data 其中conf裏存放了對solr而言最為重要的兩個配置文件schema xml和solrconfig xml data則用於存放索引文件

 schema xml主要包括types fields和其他的壹些缺省設置

 solrconfig xml用來配置Solr的壹些系統屬性 例如與索引和查詢處理有關的壹些常見的配置選項 以及緩存 擴展等等

 上面的文檔對這兩個文件有比較詳細的說明 非常容易上手 註意到schema xml裏有壹個

 

 <uniqueKey>url</uniqueKey>

 的配置 這裏將url字段作為索引文檔的唯壹標識符 非常重要

  三 加入中文分詞

 對全文檢索而言 中文分詞非常的重要 這裏采用了qieqie庖丁分詞(非常不錯 )) 集成非常的容易 我下載的是 alpha 版本 其中它支持最多切分和按最大切分 創建自己的壹個中文TokenizerFactory繼承自solr的BaseTokenizerFactory

 

 /** * Created by IntelliJ IDEA * User: ronghao * Date: * Time: : : * 中文切詞 對庖丁切詞的封裝 */ public class ChineseTokenizerFactory extends BaseTokenizerFactory { /** * 最多切分 默認模式 */ public static final String MOST_WORDS_MODE = most words ; /** * 按最大切分 */ public static final String MAX_WORD_LENGTH_MODE = max word length ; private String mode = null; public void setMode(String mode) { if (mode==null||MOST_WORDS_MODE equalsIgnoreCase(mode) || default equalsIgnoreCase(mode)) { this mode=MOST_WORDS_MODE; } else if (MAX_WORD_LENGTH_MODE equalsIgnoreCase(mode)) { this mode=MAX_WORD_LENGTH_MODE; } else { throw new IllegalArgumentException( 不合法的分析器Mode 參數設置: + mode); } } @Override public void init(Map args) { super init(args); setMode(args get( mode )); } public TokenStream create(Reader input) { return new PaodingTokenizer(input PaodingMaker make() createTokenCollector()); } private TokenCollector createTokenCollector() { if( MOST_WORDS_MODE equals(mode)) return new MostWordsTokenCollector(); if( MAX_WORD_LENGTH_MODE equals(mode)) return new MaxWordLengthTokenCollector(); throw new Error( never happened ); } }

 在schema xml的字段text配置裏加入該分詞器

 

 <fieldtype name= text class= solr TextField positionIncrementGap= >

 < *** yzer type= index >

 <tokenizer class= ronghao fulltextsearch *** yzer ChineseTokenizerFactory mode= most words /><filter class= solr StopFilterFactory ignoreCase= true words= stopwords txt />

 <filter class= solr WordDelimiterFilterFactory generateWordParts= generateNumberParts= catenateWords= catenateNumbers= catenateAll= />

 <filter class= solr LowerCaseFilterFactory />

 <filter class= solr RemoveDuplicatesTokenFilterFactory />

 </ *** yzer>

 < *** yzer type= query >

 <tokenizer class= ronghao fulltextsearch *** yzer ChineseTokenizerFactory mode= most words />

 <filter class= solr SynonymFilterFactory synonyms= synonyms txt ignoreCase= true expand= true />

 <filter class= solr StopFilterFactory ignoreCase= true words= stopwords txt />

 <filter class= solr WordDelimiterFilterFactory generateWordParts= generateNumberParts= catenateWords= catenateNumbers= catenateAll= />

 <filter class= solr LowerCaseFilterFactory />

 <filter class= solr RemoveDuplicatesTokenFilterFactory />

 </ *** yzer>

 </fieldtype>

 完成後重啟tomcat 即可在

 體驗到庖丁的中文分詞 註意要將paoding *** ysis jar復制到solr的lib下 註意修改jar包裏字典的home

  四 與自己應用進行集成

 Solr安裝完畢 現在可以將自己的應用與solr集成 其實過程非常的簡單 應用增加數據——>根據配置的字段構建add的xml文檔——>post至solr/update

 應用刪除數據à根據配置的索引文檔唯壹標識符構建delete的xml文檔——>post至solr/update

 檢索數據à構建查詢xml—>get至/solr/select/——>對solr返回的xml進行處理——>頁面展現

 具體的xml格式可以在solr網站找到 另外就是solr支持高亮顯示 非常方便

 關於中文 solr內核支持UTF 編碼 所以在tomcat裏的server xml需要進行配置

 

 <Connector port= maxHttpHeaderSize= URIEncoding= UTF …/>

 另外 向solr Post請求的時候需要轉為utf 編碼 對solr 返回的查詢結果也需要進行壹次utf 的轉碼 檢索數據時對查詢的關鍵字也需要轉碼 然後用 + 連接

 

 String[] array = StringUtils split(query null ); for (String str : array) { result = result + URLEncoder encode(str UTF ) + + ; }

lishixinzhi/Article/program/Java/hx/201311/25984

  • 上一篇:飛龜
  • 下一篇:墨西哥亡靈節時間2019墨西哥亡靈節去哪過
  • copyright 2024編程學習大全網