solr5.0入門

   簡介: solr5.0是一個獨立的應用程序,再也不依賴其餘Web服務器就能提供Web服務(這是和4.x版本最大的差別,內置jetty)。html

下載:http://lucene.apache.org/solr/java

    

  1. 安裝solrmysql

    下載壓縮包解壓便可!web

  2. 目錄說明sql

    • dist 各類jar包apache

    • contrib 各類jar包json

    • bin 經常使用命令腳本segmentfault

    • server web服務器api

      • solr 將來建立的core會在該目錄下服務器

        • configsets  solr配置集,新建的core能夠從這裏拷貝配置

        • xx-core

          • conf 配置文件

            • solrconfig.xml solr的配置信息

            • schema.xml 分詞器配置信息

          • data 索引等數據

      • logs 日誌文件

      • webapps web程序部署位置

    • example 

      • example-DIH 數據導入工具

    • licenses 各類受權協議

    • docs api文檔

  3. 啓動solr

            solr提供了啓動腳本

    bin/solr start
    前臺運行	bin/solr start -f
    指定端口號 bin/solr start -p 8984(默認端口號8983)
    查看solr狀態 bin/solr status
    結束solr  bin/solr stop -p 8984

     後臺管理地址 http://localhost:8984/solr

    logging:顯示日誌

    Core Admin: core就是搜索示例,放置索引。

    java properties:查看java配置信息

    Thread dump:查看線程信息

  4. 建立一個搜索實例

    {solr安裝路徑}/server/solr/新建一個文件夾命名爲test

    拷貝{solr安裝路徑}/server/solr/configsets/sample_techproducts_configs到test目錄下

    目錄結構以下:
             

    在後臺採用以下配置:

  5. 配置smartcn分詞期

    1. 第一步:導入smartcn的jar包

      在{solr安裝路徑}/server/solr/test/conf/solrconfig.xml加入以下代碼

      <lib dir="${solr.install.dir:../../../..}/contrib/analysis-extras/lucene-libs/" regex=".*smartcn.*\.jar"></lib>
    2. 第二步:配置分詞器

      1.solr5

      在{solr安裝路徑}/server/solr/test/conf/schema.xml加入以下代碼

      <fieldType name="text_cn" class="solr.TextField" positionIncrementGap="100">
            <analyzer> 
                <tokenizer class="org.apache.lucene.analysis.cn.smart.SmartChineseSentenceTokenizerFactory"/>
                <filter class="solr.LowerCaseFilterFactory"/>     
                <filter class="org.apache.lucene.analysis.cn.smart.SmartChineseWordTokenFilterFactory"/>           
            </analyzer>
          </fieldType>
      2.solr6

      在{solr安裝路徑}/server/solr/test/conf/managed-schema加入以下代碼

      <fieldType name="text_cn" class="solr.TextField" positionIncrementGap="100">
            <analyzer> 
                <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
                <filter class="solr.LowerCaseFilterFactory"/>
                <filter class="solr.StopFilterFactory" ignoreCase="false" words="stopwords.txt" />           
            </analyzer>
          </fieldType>

       

    3. 第三步:檢查是否正確配置
       
       若是能夠搜索到text_cn即表示配置成功,最好用一段文字測試下分詞結果。

  6. 配置數據導入handler(用於數據導入,生成索引)

    1. 第一步:導入相關jar包(solr6不須要這一步)

      在{solr安裝路徑}/server/solr/test/conf/solrconfig.xml加入以下代碼

      <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar" />
    2. 第二步:配置handler(solr6不須要這一步)

      在{solr安裝路徑}/server/solr/test/conf/solrconfig.xml加入以下代碼

      <requestHandler name="/dataimport" class="solr.DataImportHandler">
          <lst name="defaults">
            <str name="config">db-data-config.xml</str>
          </lst>
        </requestHandler>
    3. 第三步:配置數據源,源數據與索引的隱射關係

      在{solr安裝路徑}/server/solr/test/conf/下新建db-data-config.xml,配置以下:

      <dataConfig>
          <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/appfamecms" user="1" password="1"/>
          <document name="articles">
              <entity name="cms_article" query="select id,title,content,create_time from cms_article">
                  <field column="id" name="id" />
                  <field column="title" name="title" />
                  <field column="content" name="content" />
                  <field column="create_time" name="create_time" />
              </entity>
          </document>
      </dataConfig>
    4. 第四步:驗證配置是否成功

      在後臺core admin中reload當前搜索實例的配置

      then在搜索實例的dataimport出現下圖情形即爲成功

  7. 導入數據

    1. 第一步:導入mysql的jar包 下載地址:見參考資料5

      將jar放置到{solr安裝路徑}/dist目錄下,

      在{solr安裝路徑}/server/solr/test/conf/solrconfig.xml加入以下代碼

      <lib dir="${solr.install.dir:../../../..}/dist/" regex="mysql.*\.jar" />
    2. 第二步:驗證配置(配置見第六點)

      若是顯示indexing completed. Added/Updated: 1847 documents. Deleted 0 documents

      documents的個數大於0說明咱們成功導入x條數據到solr中

  8. 設置field的索引方式

  9. 查詢

  10. 更新索引

  11. 刪除索引

  12. 優化

  13. 定時完整數據從新導入

crontab -e
curl -d "command=full-import&clean=true&commit=true&optimize=true&wt=json&indent=true&verbose=false&debug=false" "http://ip:port/solr/{core名稱}/dataimport"

14.增量導入數據配置

修改db-data-config.xml添加deltaQuery、deltaImportQuery、pk三個屬性

    1.pk設置主鍵字段名稱,該字段必須在managed-schema配置過<uniqueKey>字段名</uniqueKey>

    2.deltaQuery該屬性用於查詢主鍵字段值

    3.deltaImportQuery該屬性用於查詢須要被索引的全部字段的sql

<dataConfig>
    <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/appfamecms" user="1" password="1"/>
    <document name="articles">
        <entity name="cms_article" query="select id,title,content,create_time from cms_article" pk="id" deltaQuery="select id from cms_article where id>${dataimporter.delta.id}" deltaImportQuery="select id,title,content,create_time from cms_article where id={$dataimporter.delta.id}">
            <field column="id" name="id" />
            <field column="title" name="title" />
            <field column="content" name="content" />
            <field column="create_time" name="create_time" />
        </entity>
    </document>
</dataConfig>

15.配置定時數據更新

16.搜索詞建議

https://cwiki.apache.org/confluence/display/solr/Suggester

更新中~~~

 

錯誤信息:

1.配置好的solr沒有任何數據,啓動時報錯:SolrException: Invalid Number: MA147LL/A

這不是你的錯,你多是把solr schema.xml的id設置成了int類型,設置成int類型沒什麼錯,可是solr啓動是會掃描conf目錄下的elevate.xml文件,這個文件中定義的id值是MA147LL/A因此就會出現異常SolrException: Invalid Number: MA147LL/A

解決問題的方法是修改elevate.xml文件,將其中的id值設置爲數字,就能夠了。

<dataConfig>
    <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/appfamecms" user="1" password="1"/>
    <document name="articles">
        <entity name="cms_article" query="select id,title,content,create_time from cms_article" pk="id" deltaQuery="select id from cms_article where id>${dataimporter.delta.id}" deltaImportQuery="select id,title,content,create_time from cms_article where id={$dataimporter.delta.id}">
            <field column="id" name="id" />
            <field column="title" name="title" />
            <field column="content" name="content" />
            <field column="create_time" name="create_time" />
        </entity>
    </document>
</dataConfig>

2.全量導入數據報:

Caused by: java.sql.SQLException: Illegal value for setFetchSize().

在db-data-config.xml的dataSource標籤添加batchSize屬性並賦值-1便可,修改後的內容

<dataConfig>
    <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/appfamecms" user="1" password="1" batchSize="-1"/>
    <document name="articles">
        <entity name="cms_article" query="select id,title,content,create_time from cms_article" pk="id" deltaQuery="select id from cms_article where id>${dataimporter.delta.id}" deltaImportQuery="select id,title,content,create_time from cms_article where id={$dataimporter.delta.id}">
            <field column="id" name="id" />
            <field column="title" name="title" />
            <field column="content" name="content" />
            <field column="create_time" name="create_time" />
        </entity>
    </document>
</dataConfig>

 

參考資料:

1.官網參考文檔 http://apache.fayea.com/lucene/solr/ref-guide/apache-solr-ref-guide-5.0.pdf

2.官網wiki之DataImportHandler https://wiki.apache.org/solr/DataImportHandler

‍3.solr教‍‍程,值得剛接觸搜索開發人員一看 http://blog.csdn.net/awj3584/article/details/16963525

4.Ajita博客 http://ajita.iteye.com/blog/1995140

5.CSDN MYSQL JAR包下載:http://download.csdn.net/download/nsrainbow/8196897

6.Apache Solr查詢語法 http://blog.javachen.com/2014/03/03/solr-query-syntax/

7.solr 的edismax與dismax比較與分析 http://blog.csdn.net/duck_genuine/article/details/8060026

8.solr搜索打分規制排序http://lavafree.iteye.com/blog/1685766

9.Lucene Scoring 評分機制 http://blog.chenlb.com/2009/08/lucene-scoring-architecture.html

10.解決Solr重建索引時沒有索引部分表的數據問題 http://www.jianshu.com/p/fd857c02effc

11.solrconfig.xml 應用解析調優 https://segmentfault.com/a/1190000002582878

相關文章
相關標籤/搜索