1. 程式人生 > >Solr 6.0 學習(二)建立core並插入索引

Solr 6.0 學習(二)建立core並插入索引

修改各種配置檔案。

1、修改solrhome下的solr.xml檔案

註解掉zookeeper搭建叢集配置,我們後面會採用master-slave的形式。

至於zookeeper的形式可以閱讀以下這篇文章【solrCloud叢集配置指導】:http://www.aboutyun.com/thread-9432-1-1.html

<!-- 結合zookeeper配置solrColound start -->
  <!-- 採用master-slave的方式
  <solrcloud>
    <str name="host">${host:}</str>
    <int name="hostPort">${jetty.port:8983}</int>
    <str name="hostContext">${hostContext:solr}</str>
    <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
    <int name="zkClientTimeout">${zkClientTimeout:30000}</int>
    <int name="distribUpdateSoTimeout">${distribUpdateSoTimeout:600000}</int>
    <int name="distribUpdateConnTimeout">${distribUpdateConnTimeout:60000}</int>
  </solrcloud>
  <shardHandlerFactory name="shardHandlerFactory"
    class="HttpShardHandlerFactory">
    <int name="socketTimeout">${socketTimeout:600000}</int>
    <int name="connTimeout">${connTimeout:60000}</int>
  </shardHandlerFactory>
  -->


<!-- 結合zookeeper配置solrColound end -->
2、在sorlhome資料夾下建立【my_solr】資料夾。
3、在【my_solr】資料夾中新增core.properties配置,內容如下:

name=my_solr


這個name的值實際上就core的名稱,可以任意命名,為了保證統一和方便閱讀,個人覺得最好和資料夾名稱一致。
4、將【solr-6.0.0\example\example-DIH\solr\solr】下的conf資料夾拷貝到【my_solr】資料夾下。包含如下檔案:

【conf】中檔案目錄如下:

5、solr-5.0 以上預設對schema的管理是使用managed-schema,不能手動修改,需要使用Schema Restful的API操作。

如果要想手動修改配置,把【conf】資料夾中managed-schema拷貝一份修改為schema.xml,在solrconfig.xml中修改如下:

<codecFactory class="solr.SchemaCodecFactory"/>
  <!-- 解除managed-schema管理模式 start -->
  <schemaFactory class="ClassicIndexSchemaFactory"/>
  <!-- 解除managed-schema管理模式 end -->


重啟tomcat8,可能會報錯,檢視tomcat日誌發現,比喻:
缺少DataImportHandler的jar等,那麼將【solr-6.0.0\dist】下的

solr-dataimporthandler-6.0.0.jar和solr-dataimporthandler-extras-6.0.0.jar

拷貝到【apache-tomcat-8.0.33\webapps\solr\WEB-INF\lib】下。

重啟tomcat8。如果缺少其他jar包,根據報錯資訊新增即可。沒有異常,

訪問:【http://localhost:8080/solr/index.html#/】

會出現如下介面:

選擇my_solr,會出現如下介面:

至此其實由於沒有索引資料,其實solr是個空殼,那麼下面寫一個應用程式插入solr索引資料。

參考:http://www.open-open.com/lib/view/open1452062296995.html

1、首先需要修改schema.xml檔案,新增

<field name="content_test" type="text_general" indexed="true" stored="true" multiValued="true"/>


field的屬性和配置,可以google一下schema.xml 說明很多,用法也很多,這裡就不贅述。
2、新增索引資料,程式碼如下:

編寫過程中可能會報錯,最簡便的方法是將web-inf下lib裡所有jar包新增進來,然後執行,出什麼錯,就新增什麼jar包即可。

package com.solr.insertData;
 
 
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
 
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.common.SolrInputDocument;
 
public class InsertProgarm {
    //solr 伺服器地址
    public static final String solrServerUrl = "http://localhost:8080/solr";
    //solrhome下的core
    public static final String solrCroeHome = "my_solr";
    //待索引、查詢欄位
    public static String[] docs = {"Solr是一個獨立的企業級搜尋應用伺服器",
                                    "它對外提供類似於Web-service的API介面",
                                    "使用者可以通過http請求",
                                     "向搜尋引擎伺服器提交一定格式的XML檔案生成索引",
                                    "也可以通過Http Get操作提出查詢請求",
                                    "並得到XML格式的返回結果"};
    public static void main(String[] args) {
        SolrClient client = getSolrClient();
        int i=0;
        List<SolrInputDocument> solrDocs = new ArrayList<SolrInputDocument>();
        for (String content : docs) {
            SolrInputDocument doc = new SolrInputDocument();
            doc.addField("id", i++);
            doc.addField("content_test", content);
            solrDocs.add(doc);
        }
        try {
            client.add(solrDocs);
            client.commit();
        } catch (SolrServerException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }
    public static SolrClient getSolrClient(){
        return new HttpSolrClient(solrServerUrl+"/"+solrCroeHome);
    }
 
}


3、執行成功後,會在【solrhome/my_solr】資料夾下建立一個【data】的資料夾,這個資料夾中的內容就是我們的solr索引。
其實其對於的是solconfig.xml中如下配置:

<!-- Data Directory
       Used to specify an alternate directory to hold all index data
       other than the default ./data under the Solr home.  If
       replication is in use, this should match the replication
       configuration.
    -->
  <dataDir>${solr.data.dir:}</dataDir>


4、訪問http://localhost:8080/solr/index.html選擇【my_solr】core,選擇query得到如下介面:


紅色區域是針對不同的ui,因為瀏覽器版本問題,我這裡面選擇使用【Use original UI】,會跳轉到http://localhost:8080/solr/old.html#/

選擇【my_solr】core,選擇query,點選【Execute Query】查詢結果如下:

其實其訪問的url實際為:http://localhost:8080/solr/my_solr/select?q=*%3A*&wt=json&indent=true

至於q、wt、indent等引數,代表的含義,可以搜尋solr查詢語法。

那麼至此,我們就將solr外掛完畢,結合了core和建立索引、查詢程式,完成!