solr 6.1 服務端 tomcat 搭建及調用


一、下載

apache solr6.1.0 最新版本zip,解壓縮生成一個solr6.1.0文件夾

二、安裝

1、在d:/projects下新建一個solr

2、把solr6.1.0/server/solr復制到d:/projects/solr/下,並把文件夾改為home,即d:/projects/solr/home.

3、復制一個tomcat文件夾在d:/projects/下,並改名為:d:/projects/server

4、把solr-6.1.0\server\solr-webapp\webapp復制到D:\projects\solr\server\webapps下,並改名為

solr,即為: D:\projects\solr\server\webapps\solr

                

 

5、修改tomcat配置文件,D:\projects\solr\server\conf\server.xml:

在<Host name="localhost"  appBase="webapps"

            unpackWARs="true" autoDeploy="true">下添加:

<Context path="" docBase="solr" reloadable="false" crossContext="true">

                            <Environment name="solr/home" type="java.lang.String" value="D:\projects\solr\home" override="true"/>

                   </Context>

這里的docBase=”solr”,對應D:\projects\solr\server\webapps\solr 這里的文件夾中的solr;

value=””上面第2條中的地址。

6、把solr-6.1.0.0\server\lib\ext中的所有jar包得制到tomcat\lib下(即D:\projects\solr\server\lib\)。

7、啟動tomcat--------------------------

8、瀏覽器中輸入地址:http://localhost:8080/index.html

三、配置

         core配置

1、  把D:\projects\solr\home\configsets\basic_configs文件夾復制到D:\projects\solr\home\下,並改名為core1,即D:\projects\solr\home\core1

2、  在瀏覽器中,選擇core admin,點擊add core,輸入一下下內容,instanceDir一定要寫為上面一步中修改后的文件夾名。

solrconfig.xml 和  managed-schema 兩個文件在 D:\projects\solr\home\core1\conf 中

 

 

solr管理界面登錄權限配置(

注:

權限配置 最好先別配置 等 測試代碼連接到 solr 並成功返回后 再嘗試配置

 

)

         1、修改tomcat的tomcat-user.xml ,</tomcat-user>上面添加:

<role rolename="solr"/>

<user username="admin" password="admin" roles="solr"/>

3、  修改solr項目中的D:\projects\solr\server\webapps\solr\WEB-INF \web.xml, 在</web-app>上面添加:

  <security-constraint>

    <web-resource-collection>

           <web-resource-name>Solr Lockdown</web-resource-name>

           <url-pattern>/</url-pattern>

</web-resource-collection>

<auth-constraint>

           <role-name>solr</role-name>

           <role-name>admin</role-name>

</auth-constraint>

  </security-constraint>

  <login-config>

<auth-method>BASIC</auth-method>

<realm-name>Solr</realm-name>

  </login-config>

3、重新啟動tomcat,再使用管理界面就必須要輸入用戶名/密碼(admin/admin)了。

客戶端訪問權限控制

在D:\projects\solr\server\webapps下創建:communityserver_override.config,內容如下:

<?xml version="1.0" encoding="utf-8"?>

<Overrides>

<Override xpath="/CommunityServer/Search/Solr" mode="change" name="host" value="http://localhost:8080" />

</Overrides>

value的值為瀏覽器中訪問地址?待確認.

四、中文分詞器

mmseg4j中文分詞器

1、  從網上maven庫下載最新版本: mmseg4j-core-1.10.0.jar; mmseg4j-solr-2.3.0.jar(中有這二個jar, mmseg4j-analysis-1.9.1.jar不能放,否則會報java.lang.NoSuchMethodError: com.chenlb.mmseg4j.analysis.MMSegTokenizer.<init>(Lcom/chenlb/mmseg4j/Seg;)V錯誤,因為mmseg4j-solr-2.3.0已經包含了mmseg4j-analysis)。放在D:\projects\solr\server\webapps\solr\WEB-INF\lib\下。

2、 

配置schema.xml。

schema.xml的配置也挺簡單,首先需要在schema.xml文件中配置一個fieldType節點,如下:

<!-- mmseg4j -->
<fieldType name="text_zh" class="solr.TextField" positionIncrementGap="100">
<span style="white-space:pre"> </span><analyzer>
<span style="white-space:pre"> </span><tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" />
<span style="white-space:pre"> </span></analyzer>
</fieldType>

然后就可以在field節點中引用該filedType了,假設你有個字段叫keyWord需要支持中文分詞,只需要定義示例filed節點如下:

<field name="keyWord" type="text_zh" indexed="true" stored="false" multiValued="true"/>

 

 

 

 

五、使用solrj操作solr

         1、URL不可以帶admin.html

         2、SolrInputDocument中的字段,必須在core1/conf/managed-schema中有對應的field

    3、必須先創建索引,查詢才有數據

    4、如果有走http協議(使用httpclient操作)有管理密碼(web.xml中的配置),會報: This request requires HTTP authentication.

         package com.test;

  5、如果  出現   以下相關異常報錯

    servlet [default] in context with path [/solr] threw exception
 org.apache.solr.common.SolrException: Error processing the request. CoreContainer is either not initialized or shutting down.
    at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:217)
    at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:208)

  解決方案:

  可以在D:\projects\solr\server\webapps\solr目錄中創建 lib目錄然后將solr解壓開的文件夾dist中jar包和contrib\velocity\lib
下的jar拷貝到該新創建的lib目錄就可以了。(注:是把 dist目錄和 contrib\velocity\lib 下的所有jar 包括子目錄里的 jar 全部復制到  D:\projects\solr\server\webapps\solr\lib 中  lib中所有jar都是平級的 lib 下沒有子目錄)

 

以下java 代碼進行連接  查詢測試

需要引用  兩個jar 文件 在項目的 pom   文件中 添加 如下代碼:

<dependency>
        <groupId>org.apache.solr</groupId><artifactId>solr-solrj</artifactId><version>6.1.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.solr</groupId><artifactId>solr-core</artifactId><version>6.1.0</version>
    </dependency>

<!--可能還會需要下面這個 如果你的pom文件報了這個錯的話  可能還會報 org.restlet-2.3.0.jar 這個文件找不到   下載一個到你的maven本地倉庫 就可以了-->

<dependency>
<groupId>jdk.tools</groupId>
<artifactId>jdk.tools</artifactId>
<version>1.6</version>
<scope>system</scope>
<systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
</dependency>

 

 注: 如果配置了 訪問權限  下面在連接的時候 會報錯 

  如果想要在有用戶名密碼的環境下連接使用  則以下代碼在 連接的時候  需要添加  http的用戶名密碼 驗證(具體添加方法 自行網絡搜索 )

  另:安全配置除了 添加用戶名密碼 外 還需要 綁定  允許訪問的ip地址 為localhost 127.0.0.1 或者服務器 真實Ip地址  防止 被惡意攻擊

  綁定方法 自行 網絡搜索

 

import org.apache.solr.client.solrj.*;

import org.apache.solr.client.solrj.impl.HttpSolrClient;

import org.apache.solr.client.solrj.response.QueryResponse;

import org.apache.solr.common.SolrDocument;

import org.apache.solr.common.SolrDocumentList;

import org.apache.solr.common.SolrInputDocument;

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

 

public class MySolr {

    //solr url

    public static final String URL = "http://localhost:8080/solr";

    //solr應用

    public static final String SERVER = "core1";

    //待索引、查詢字段                                                                                             http://localhost:8080/solr53/#/connection1

    public static String[] docs = {"Solr是一個獨立的企業級搜索應用服務器",

                                    "它對外提供類似於Web-service的API接口",

                                    "用戶可以通過http請求",

                                     "向搜索引擎服務器提交一定格式的XML文件生成索引",

                                    "也可以通過Http Get操作提出查找請求",

                                    "並得到XML格式的返回結果"};

 

    public static SolrClient getSolrClient(){

    System.out.println(URL+"/"+SERVER);

        return new HttpSolrClient(URL+"/"+SERVER);

    }

 

    /**

     * 新建索引

* 就是 把數據放到 solr中  以便搜索查詢  可以單獨寫一個方法 導入

*最好是  配置solr 連接數據庫  自動導入相關數據到索引庫(沒有配置好 如果你有完整的配置 方法  歡迎留言)

     */

    public static void createIndex(){

        SolrClient client = getSolrClient();

        int i = 0;

        List<SolrInputDocument> docList = new ArrayList<SolrInputDocument>();

        for(String str : docs){

            SolrInputDocument doc = new SolrInputDocument();

            doc.addField("id",i++);

            doc.addField("content", str);//需要在core1/conf/managed-schema中有對應的field

            docList.add(doc);

        }

        try {

            client.add(docList);

            client.commit();

        } catch (SolrServerException e) {

            e.printStackTrace();

        } catch (IOException e) {

            e.printStackTrace();

        }

    };

 

    /**

     * 搜索

     */

    public static void search(){

        SolrClient client = getSolrClient();

        SolrQuery query = new SolrQuery();

        query.setQuery("content:搜索");

        QueryResponse response = null;

        try {

            response = client.query(query);

            System.out.println(response.toString());

            System.out.println();

            SolrDocumentList docs = response.getResults();

            System.out.println("文檔個數:" + docs.getNumFound());

            System.out.println("查詢時間:" + response.getQTime());

            for (SolrDocument doc : docs) {

                System.out.println("id: " + doc.getFieldValue("id") + "      content: " + doc.getFieldValue("content"));

    //配置分詞后

            }

        } catch (SolrServerException e) {

            e.printStackTrace();

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

 

    public static void main(String[] args) {

//        createIndex();

        search();

    }

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM