Solr 真是一個不錯的東西,想說架一個來玩,安裝時花了很多時間,網路上大部分查到的都是直接用 jetty 來執行,問了同事之後得知可以把 example 下的 solr.war 檔案直接拉到 tomcat 目錄下,但怎麼試就是沒辦法,這篇記錄 solr 與 tomcat 搭配的過程。

花了不少時間,怎麼 war 檔不是直接拉到 tomcat 目錄下就可以使用 … 這安裝也太麻煩了,先記錄下來,如果有什麼意外要再灌一次才知道怎麼弄。苦痛的記憶開始 … 小蛙的環境是:Ubuntu 13.04 64bit + Solr 4.5.0 + tomcat 7。

  1. 安裝 tomcat 7
    # apt-get install tomcat7
  2. 下載 solr 4.5,假設放在 /usr/src 下
    # cd /usr/src
    # wget http://apache.stu.edu.tw/lucene/solr/4.5.0/solr-4.5.0.zip
  3. 解壓縮 (如果沒有 unzip 就 # apt-get install unzip,不想安裝的話也可以到 這邊下載 tgz 版本)
    # unzip solr-4.5.0.zip
  4. 複製需要的 war 檔案到 tomcat 目錄下
    # cd solr-4.5.0
    # cp ./example/webapps/solr.war /var/lib/tomcat7/webapps/solr.war
  5. 建立 solr.xml 設定檔,底下的 /opt/solr 是 solr 的資料放置目錄
    # vim /var/lib/tomcat7/conf/Catalina/localhost/solr.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <Context path="/solr" docBase="/var/lib/tomcat7/webapps/solr.war" crossContext="true" privileged="true" antiResourceLocking="false">
      <Environment name="solr/home" type="java.lang.String" value="/opt/solr" override="true" />
    </Context>
  6. 建立 solr 資料目錄,並新增 solr.xml 設定檔
    # mkdir -p /opt/solr
    # vim /opt/solr/solr.xml
    <?xml version="1.0" encoding="UTF-8" ?>
    <solr persistent="true">
        <cores adminPath="/admin/cores">
            <core name="example" instanceDir="example" />
            <!-- adding extra cores!
            <core name="another_example" instanceDir="another_example_directory" />
            -->
        </cores>
    </solr>
  7. 更改擁有者及群組
    # chown -R tomcat7:tomcat7 /opt/solr/example
  8. 複製必須的設定檔
    # cp /usr/src/solr-4.5.0/example/solr/collection1/conf/*.txt /opt/solr/example/conf/
    # cp /usr/src/solr-4.5.0/example/multicore/core0/conf/*.xml /opt/solr/example/conf/
  9. 增加以下設定 (參考資料1,先照著做)
    # vim /opt/solr/example/conf/solrconfig.xml
    <requestHandler name="/update/csv" class="solr.CSVRequestHandler" startup="lazy"></requestHandler>
    <requestHandler name="/admin/luke" class="org.apache.solr.handler.admin.LukeRequestHandler" />
    <requestHandler name="/spell" class="solr.SearchHandler" startup="lazy">
        <lst name="defaults">
            <str name="spellcheck.onlyMorePopular">false</str>
            <str name="spellcheck.extendedResults">false</str>
            <str name="spellcheck.count">1</str>
        </lst>
            <arr name="last-components">
                <str>spellcheck</str>
            </arr>
    </requestHandler>
    <searchComponent name="suggest" class="solr.SpellCheckComponent">
        <lst name="spellchecker">
            <str name="name">suggest</str>
            <str name="classname">org.apache.solr.spelling.suggest.Suggester</str>
            <str name="lookupImpl">org.apache.solr.spelling.suggest.tst.TSTLookup</str>
            <str name="field">title</str>
        <str name="buildOnCommit">true</str>
        </lst>
    </searchComponent>
    <requestHandler name="/suggest" class="org.apache.solr.handler.component.SearchHandler">
        <lst name="defaults">
            <str name="spellcheck">true</str>
            <str name="spellcheck.dictionary">suggest</str>
            <str name="spellcheck.count">10</str>
        </lst>
            <arr name="components">
                <str>suggest</str>
            </arr>
    </requestHandler>
  10. 這應該是一種報應,小蛙設定 Eclipse RSE 時不小心做了刪除動作,結果就把整個 tomcat/webapps 全刪了 … 照著上面的步驟重做一次後發現漏掉這一步 = =,把執行 solr 需要的 JAR 加入到 lib 資料夾中
    # cp /usr/src/solr-4.5.0/example/lib/ext/* /var/lib/tomcat7/webapps/solr/WEB-INF/lib/
  11. 重新啟動 tomcat
    # service tomcat7 restart<span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;"> </span>

到這邊大致上就完成囉!如果沒有改 tomcat port 的話,http://your_domain:8080/solr 就可以連到 solr 囉!裡面只有剛剛複製的 collection1,之後開始新增 / 修改 / 刪除 資料時,再把過程記錄下來!
更多其他設定請參考 Solr 教學 (2) – tomcat 7 以帳號密碼限制存取頁面Solr 教學 (3) – 以 Remote Address Filter 限制存取

參考資料:

  1. How to install SOLR 4.0 Cloud with Tomcat 7 on Ubuntu 12.04 LTS @ nodeX
    http://www.nodex.co.uk/article/10-12-12/how-to-install-solr-4-0-cloud-with-tomcat-7-on-ubuntu-12-04-lts

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *