Apache solr 6.6.0安裝

Apache solr 6.6.0安裝html

最近使用了Apache solr搜索引擎框架,solr是基於lucene的一個搜索服務器,lucene也是Apache的一個開源項目;對於學習搜索引擎來講,這個入門也是不錯的mysql

http://www.apache.org/dyn/closer.lua/lucene/solr/6.6.0,首先先把Apache solr 6.6.0的包下載.web

我下載來的目錄結構是這樣的,bin裏能夠進行solr的啓動,幾條基本的命令,在bin裏:通常使用端口爲8983sql

solr start -p 8983,開啓solr

solr stop -p 8983,關閉solr

solr start -p 8983 -f 前臺開啓,默認是後臺開啓

也能夠不加-p 端口,會開啓默認端口,數據庫

瀏覽器裏打開solr管理界面 http://localhost:8983/solr/

apache

solr create -c <name> 建立一個核心
solr delete -c <name> 刪除一個核心

建立好的核心是放在solr-6.6.0\server\solr\下的,進入建立好的核內心,瀏覽器

核心/data/index/裏的文件和lucene的索引文件差很少,核心/conf/的裏文件服務器

 

data-config.xml文件是本身創的,而最常修改的文件就是solrconfig.xml和managed-schema,注意版本不一樣,配置文件的名稱也不一樣app


 

通常若是要讓搜索引擎支持中文的話,是須要加入中文詞法分析,而若是要和數據庫鏈接,是須要數據庫的架包,首先考慮你的搜索引擎是否須要中文詞法分析器.框架

 對幾種中文分析器: StandardAnalyzer、ChineseAnalyzer、CJKAnalyzer、IK_CAnalyzer、MIK_CAnalyzer、MMAnalyzer(JE分詞)、PaodingAnalyzer等,我用的是IK_CAnalyzer

連接:http://pan.baidu.com/s/1o8HoQRg 密碼:yavs,下載的地址,下好的文件夾爲

 

固然,將ik-analyzer-solr5-5.x.jar 放入solr-6.6.0\server\solr-webapp\webapp\WEB-INF\lib,通常對於架包都是放着的

 

IKAnalyzer.cfg.xmlmydict.dic(搜狗的擴展詞庫),stopword.dic放入solr-6.6.0\server\solr-webapp\webapp\WEB-INF\classes

 

而後有了這些架包,就須要在配置文件裏導入,在本身的核心\conf\managed-schema

  <fieldType name="text_id" class="solr.TextField" positionIncrementGap="100">
    <analyzer>
      <tokenizer class="solr.StandardTokenizerFactory"/>
      <filter class="solr.LowerCaseFilterFactory"/>
      <filter class="solr.StopFilterFactory" words="lang/stopwords_id.txt" ignoreCase="true"/>
      <filter class="solr.IndonesianStemFilterFactory" stemDerivational="true"/>
    </analyzer>
  </fieldType>
<!--它以後添加添加配置-->
  <fieldType name="text_ik" class="solr.TextField">
    <analyzer type="index">
      <tokenizer class="org.apache.lucene.analysis.ik.IKTokenizerFactory" useSmart="false"/>
    </analyzer>
    <analyzer type="query">
      <tokenizer class="org.apache.lucene.analysis.ik.IKTokenizerFactory" useSmart="true"/>
    </analyzer>
  </fieldType>

即添加一個類型爲"text_ik",以後保存,接下來測試一下,先Reload一下,

 

 

 在本身的核內心的Analysis裏測試,記得選擇FieldType爲text_ik,即中文詞法分析,Verbose Output可選不可選均可以,


接下來就是配置數據庫鏈接,   大多數的應用程序將數據存儲在關係數據庫、xml文件中。對這樣的數據進行搜索是很常見的應用。所謂的DataImportHandler提供一種可配置的方式向solr導入數據,能夠一次所有導入,也能夠增量導入。

 Handler首先要在本身的核心\conf\solrconfig.xml文件中配置下,以下所示:(強迫症,位置必定要規範,其實放哪都行)

  <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-velocity-\d.*\.jar" />
  
      <!--以後引入DataImportHandler類的jar-->
    <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar" />

在隨便一個<requestHandler>...</requetHandler>以後添加:


<
requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">data-config.xml</str> </lst> </requestHandler>

 

我使用的是mysql,首先在覈內心添加一個字段,這個字段能夠經過

 

 

注意一下,field type看你的須要寫,若是須要中文分析,就用text_ik,填好後,而後添加(Add Field)

或者在本身的核心\conf\managed-schema裏:

  <field name="_version_" type="long" indexed="false" stored="false"/>
<!--以後添加,字段類型注意-->
  <field name="content" type="text_ik" indexed="true" stored="true"/> 
  <field name="id" type="string" multiValued="false" indexed="true" required="true" stored="true"/>
  <field name="title" type="text_ik" indexed="true" stored="true"/>
<!--以前添加-->
  <dynamicField name="*_txt_en_split_tight" type="text_en_splitting_tight" indexed="true" stored="true"/>

其實放置的位置無所謂,只是最好仍是規範一點好

接下來就是配置data-config.xml,在data-configxml中

<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
    <dataSource name="production" type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/solr_test" user="root" password="root" batchSize="-1" />
  <document name="news">
        <entity dataSource="production" name="test" 
        pk="id"
        query="select * from test"
        deltaImportquery="select * from test where id=${dih.delta.id}" >
            <!--column的id是數據庫的id,name的id是managed_schema裏面的id,id是必須,而且惟一的-->
            <field column="id" name="id" />
             <!--column的title是數據庫的title字段,name的title是managed_schema裏面的title,下面配置同理-->
            <field column="id" name="id" />
            <field column="title" name="title" />
            <field column="content" name="content" />
        </entity>
    </document>
</dataConfig>

先添加一個數據源,以後就是添加一個<document>,架包的位置和配置中文詞法分析的架包放置位置同樣,solr-6.6.0\server\solr-webapp\webapp\WEB-INF\lib,接下來測試一下,先Reload一下,而後

Command中選擇full-import(全文導入),Entity即選擇data-config.xml下本身寫的,Execute後,多Refresh Status幾回

 

 

就看到效果了

http://www.cnblogs.com/llz5023/archive/2012/11/15/2772154.html,推薦的一篇博客


 

最後的最後寫下本身最近寫的聯合查詢,有時候我想把多個表信息查出來,在data-config.xml中:

<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
    <dataSource name="production" type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/shop_manager" user="root" password="root" batchSize="-1" />
  <document name="items">
        <entity dataSource="production" name="all_resource" 
        pk="id"
        query="select name,description,price from food_store union select name,description,price from cloths_store union select name,description,price from book_store;">
            <!--column的id是數據庫的id,name的id是managed_schema裏面的id,id是必須,而且惟一的,不過我設置了uuid和更新策略-->
            <field column="name" name="name"/>
            <field column="description" name="description"/>
            <field column="price" name="price"/>
        </entity>
    </document>
</dataConfig>

query中這麼寫,不過呢,有一個衝突就是id的重複,若是去掉id字段即,惟一鍵就沒了,因此我就用了UUID,含義是通用惟一識別碼 (Universally Unique Identifier)

修改本身的核心\conf\solrconfig.xml中的結果爲:

<!--RequestHandler 手動添加-->
  <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
  <lst name="defaults">
    <str name="config">data-config.xml</str>
    <str name="update.chain">uuid</str>
  </lst>
</requestHandler>
<!--還需添加一個uuid的更新策略-->
<requestHandler name="/update" class="solr.UpdateRequestHandler">
       <lst name="defaults">
        <str name="update.chain">uuid</str>
       </lst>  
</requestHandler>

 

搜索updateReqeustProcessorChain,在:

<updateRequestProcessorChain name="add-unknown-fields-to-the-schema">

前加入以下配置:

<updateRequestProcessorChain name="uuid">
     <processor class="solr.UUIDUpdateProcessorFactory">
          <str name="fieldName">id</str>
     </processor>
     <processor class="solr.LogUpdateProcessorFactory" />
     <processor class="solr.DistributedUpdateProcessorFactory" />
     <processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>

 

修改本身的核心\conf\solrconfig.xml中的

<field name="id" type="uuid" multiValued="false" indexed="true" required="true" stored="true"/>

添加一個fieldType類型

<fieldType name="uuid" class="solr.UUIDField" indexed="true"/>
<!--確保uniqueKey的值是已經定義的,通常默認是id-->
  <uniqueKey>id</uniqueKey>

Reload搞定

參考文檔https://blog.liyang.io/261.html

相關文章
相關標籤/搜索