solr使用流程

一、定義


Solr是一個獨立的企業級搜索應用服務器,它對外提供類似於Web-service的API接口。用戶可以通過http請求,向搜索引擎服務器提交一定格式的XML文件,生成索引;也可以通過Http Get操作提出查找請求,並得到XML格式的返回結果。


基於Lucene的全文搜索服務器。同時對其進行了擴展,提供了比Lucene更爲豐富的查詢語言,同時實現了可配置、可擴展並對查詢性能進行了優化,並且提供了一個完善的功能管理界面,是一款非常優秀的全文搜索引擎 


二 、搭建服務:

 參見 點擊打開鏈接 


三、創建任務 


 當你的環境以安裝solr服務 後,按照自己想要實現的功能創建自己的solr 任務 


距離 我想創建一個 testQuery  

1.在solr目錄下 執行:./bin/solr create -c   testQuery   (創建成功 會有一個成功提示的  ,到目前爲止solr 裏面已經有一個爲某一個)

   此時在solr/server/solr 下面出現 testQuery   目錄

2.啓動solr :   ./bin/solr restart   


3.testQuery   目錄結構 :


主要修改 都在conf下面 

conf 目錄結構:


data-config.xml文件 是添加索引  表結構 的 ,當每次將數據庫數據導入solr 時候需要按照這個文件定義的結構去導入


<dataConfig>  
    <dataSource type="JdbcDataSource"  
        driver="com.mysql.jdbc.Driver"  
        url="jdbc:mysql://11.11.11.11:800/database"  
        user="root" password="123456"/>  
    <document>  
        <entity name="database" query="SELECT * FROM table;  "    
 deltaQuery="SELECT id  FROM table  where  `create` > unix_timestamp('${dataimporter.last_index_time}' ;  "   
  deltaImportQuery="SELECT * FROM table where id =${dataimporter.delta.tid}"  pk='tid'>  
            <field column="id" name="id" />  
            <field column="subject" name="subject" />  
            <field column="views" name="views" />  
           <field column="vip" name="vip" />  
            <field column="message" name="message" />  
            <field column="create" name="create" />  
        </entity>  
    </document>  
</dataConfig>  

 dataConfig 裏面是對數據庫導入的一個配置

   dataSource:數據庫連接配置

   document:數據庫索引配置

       entity:name= 數據庫名字

                   query=全量導入數據的sql

                  deltaQuery:增量導入的id

                  deltaImportQuery:增量導入的sql  

 解釋一下全量和增量:正常數據庫導入solr第一次是全部導入,但是隨着時間的變化數據庫和solr數據不一致,這時候需要再次導入,按時間技術,半小時或者更合適的時間,只需要增量導入即可,更合適的時間再次全量導入即可

               field  這些是返回字段的定義

 

==到現在數據庫和solr的關係完事了,下面是solr自身對這些字段的處理


schema.xml  是被 solrconfig.xml 加載或者調用的  ,負責設置 每次查詢的展示字段 、負責設置關聯查詢、負責設置停止詞 近義詞 的 設置 


<schemaFactory class="ManagedIndexSchemaFactory">  
      <bool name="mutable">true</bool>  
      <str name="managedSchemaResourceName">managed-schema</str>  
 </schemaFactory>  

在conf下面的 managed-schema 文件裏對索引配置

 1.配置中文分詞mmseg4j

<!-- mmseg4j-->  
    <fieldType name="text_mmseg4j_complex" class="solr.TextField" positionIncrementGap="100" >    
        <analyzer type="index">    
           <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="solr-5.5.3/server/solr/discuz/conf/dic"/>    
           <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>  
           <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>  
        </analyzer>  
        <analyzer type="query">  
           <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="solr-5.5.3/server/solr/discuz/conf/dic"/>   
           <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>  
           <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>  
        </analyzer>  
    </fieldType>    
    <fieldType name="text_mmseg4j_maxword" class="solr.TextField" positionIncrementGap="100" >    
        <analyzer>    
            <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="max-word" dicPath="solr-5.5.3/server/solr/discuz/conf/dic"/>  
        </analyzer>    
    </fieldType>  
    <fieldType name="text_mmseg4j_simple" class="solr.TextField" positionIncrementGap="100" >    
        <analyzer>    
            <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple" dicPath="solr-5.5.3/server/solr/discuz/conf/dic"/>       
        </analyzer>    
        </fieldType>  
    <!-- mmseg4j-->  

solr-5.5.3/server/solr/discuz/conf/dic:中文分詞的分詞庫目錄,在改目錄下放word.dic分詞文件

 stopwords.txt:停詞文件

 synonyms.txt:近義詞文件

    analyzer type="index":索引檢查分詞、停詞、近義詞

   analyzer type="query":查找檢查分詞、停詞、近義詞

2.配置索引字段、字段類型、查詢字段的中文分詞類型


<field name="submes" type="<span style="color: #ff6600;">text_mmseg4j_complex</span>" indexed="true" stored="true" required="true" multiValued="true" />  
<field name="id" type="int" indexed="true" stored="true" required="true" multiValued="false" />  
<field name="vip" type="int" indexed="true" stored="true" required="true" multiValued="false" />  
<field name="views"    type="int" indexed="true" stored="true" required="true" multiValued="false" />  
<field name="create" type="int" indexed="true" stored="true" required="true" multiValued="false" />  
<field name="subject" type="string" indexed="true" stored="true" required="true" multiValued="false" />  
<field name="message" type="text_general" indexed="true" stored="true" required="true" multiValued="false" />  
<copyField source="subject" dest="submes" />  
<copyField source="vip" dest="submes" />  
<copyField source="views" dest="submes" />  
<copyField source="create" dest="submes" />  

 field 字段定義了solr展示的類型

   name:字段名字

   type:字段類型(如果是要進行查詢的字段,類型爲中文分詞類型如:text_mmseg4j_complex)

   indexed:true

    stored:true

   required:true

        multiValued:查詢字段設置爲true ,其他爲false

copyField : 拷貝需要索引的字段到整合字段中 submes是本列子中的整合字段  solr查詢也是查詢這個字段

  這個字段可以根據多個字段進行權重設置,並且打分,排序



五.使用

1.增量導入,在你的solr使用界面上左邊下拉框找到discuz 

  下面出現的

  Dataimport: 是執行增量全量導入的

  query:搜索

  analysis:分詞

 

 

無法加載圖片,根據很難形容,但是打開這個界面就知道了

 

2.搜索打分:有的時候我們除了想根據匹配度排序外,還想根據瀏覽量、創建時間、是否是vip等綜合因素排序,

在curl請求時 請求參數要加上下面的值:

       $params['defType'] = 'edismax' ;

       $params['bf'] = "sum(linear(vip,1000,0),linear(sqrt(log(linear(views,1,2))),100,0),sqrt(log(create)))";

    

  bf裏面的參數是solr支持的打分標準的函數,具體使用參考點擊打開鏈接詳解  很不完善,後續還會完善,如有問題隨時提問




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章