Solr實現站內搜索

solr常用命令:

  • solr start 啓動solr單機版
  • solr start -p 8984 指定端口啓動
  • solr restart 重啓
  • solr create/create_collection -c coreName 創建新core
  • solr delete -c coreName 刪除core
  • solr stop -all 停止solr
  • solr status 查看solr狀態
  • java -Dauto -Dc=gettingstarted -Drecursive=yes -jar example\exampledocs\post.jar docs/  導入數據

使用:

  • 進入solr的bin目錄,solr start即可啓動,默認使用8983端口。
  • 使用solr create_collection -c coreName 創建一個core。
  • 修改/server/solr/coreName/conf 內的managed-schema和solrconfig.xml文件,添加如下代碼

managed-schema:配置中文分詞

<field name="question_title" type="text_ik" indexed="true" stored="true" multiValued="true"/>
<field name="question_content" type="text_ik" indexed="true" stored="true" multiValued="true"/>

<fieldType name="text_ik" class="solr.TextField">
    <!--索引時候的分詞器-->
    <analyzer type="index">
        <tokenizer class="org.wltea.analyzer.util.IKTokenizerFactory" useSmart=“false"/>
        <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
    <!--查詢時候的分詞器-->
    <analyzer type="query">
        <tokenizer class="org.wltea.analyzer.util.IKTokenizerFactory" useSmart=“true"/>
    </analyzer>
</fieldType>

 

solrconfig.xml:數據庫導入數據的時候使用

<lib dir="${solr.install.dir:../../../..}/ext/ikanalyzer" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/ext/mysql" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-\d.*\.jar" />
<requestHandler name="/dataimport" class="solr.DataImportHandler">
  <lst name="defaults">
    <str name="config">solr-data-config.xml</str>
  </lst>
</requestHandler>

 

再新建一個solr-data-config.xml文件,連接數據庫使用

<dataConfig>
    <dataSource type="JdbcDataSource"
              driver="com.mysql.cj.jdbc.Driver"
              url="jdbc:mysql://localhost:3306/wenda?serverTimezone=UTC"
              user="root"
              password="w123456"/>
    <document>
        <entity name="question"  query="select id,title,content from question">
            <field column="content" name="question_content"/>
            <field column="title" name="question_title"/>
        </entity>
    </document>
</dataConfig>

 

  • 在solr根目錄創建ext文件夾(自定義),然後在文件內放入ik_analyzer(自己編譯的)和mysql-connector的jar包。
  • 重啓solr :solr restart -p 8983
  • 使用Dataimport導入數據庫數據
  • 使用Query可以測試查詢數據。
  • 在Java中使用solr-solrj包來操作solr
 

solr原理:

  • 先全文檢索然後創建反向索引
  • 全文檢索:對文檔內容進行分詞,對分詞後的結果創建索引,然後通過對索引進行搜索的方式叫做全文檢索。
  • Solr/Lucene採用的是一種反向索引,所謂反向索引:就是從關鍵字到文檔的映射過程,保存這種映射這種信息的索引稱爲反向索引
  • 全文檢索過程:
    • 去除停詞和標點符號,例如英文的this,that等, 中文的”的”,”一”等沒有特殊含義的詞
    • 會將所有的大寫英文字母轉換成小寫,方便統一創建索引和搜索索引
    • 將複數形式轉爲單數形式,比如students轉爲student,也是方便統一創建索引和搜索索引
  • 搜索過程:
    • 1.用戶輸入搜索條件
    • 2.對搜索條件進行分詞處理
    • 3.根據分詞的結果查找索引
    • 4.根據索引找到文檔ID列表
    • 5.根據文檔ID列表找到具體的文檔,根據出現的頻次等計算權重,最後將文檔列表按照權重排序返回
 
 
 
 
 
 
 
 
 
 
 
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章