1. 程式人生 > >(二)java8-solr6.4.1-tomcat8.5建立core 和java Demo

(二)java8-solr6.4.1-tomcat8.5建立core 和java Demo

建立專案:

 <!-- 
  <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> <str name="zkCredentialsProvider">${zkCredentialsProvider:org.apache.solr.common
.cloud.DefaultZkCredentialsProvider}</str> <str name="zkACLProvider">${zkACLProvider:org.apache.solr.common.cloud.DefaultZkACLProvider}</str> </solrcloud> <shardHandlerFactory name="shardHandlerFactory" class="HttpShardHandlerFactory"> <int name="socketTimeout
">${
socketTimeout:600000}</int> <int name="connTimeout">${connTimeout:60000}</int> </shardHandlerFactory> -->

以上這程式碼塊註釋即可(預設沒有註釋)
3. 在sorl-home資料夾下建立【my_solr】資料夾。
4. 將【solr-6.4.1\example\example-DIH\solr\solr】下的conf資料夾拷貝到【my_solr】資料夾下。包含如下檔案
資料夾內容
5. 修改core.properties中內容(這個name的值實際上就core的名稱,可以任意命名):

        name=my_core

7.看到以上基本上建立專案已經成功了。

demo測試

  1. 以上配置是預設對schema的管理是使用managed-schema(在sole-home/my_core/conf/下),我在這不更改其他自定義配置
    這裡寫圖片描述
    看圖(managed-schema配置資訊):在JAVA程式碼中我會使用預設的field(紅框標識的兩個),後面文章中會主要說明該配置.
  2. 匯入maven依賴:
       <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.solr/solr-solrj -->
        <dependency>
            <groupId>org.apache.solr</groupId>
            <artifactId>solr-solrj</artifactId>
            <version>6.4.1</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.7</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.3</version>
        </dependency>

3 . 編寫如下程式碼:

import java.io.IOException;

import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
/**
 * API簡單操作
 * @author weishuai
 *
 */
public class SolrTest {
    // solr 部署的url
    private static final String url = "http://localhost:8081/solr";
    // home
    private static final String uri = "my_solr";

    // 新增一條資料
    public static void addDoc() throws SolrServerException, IOException {
        // 得到請求
        SolrClient sc = getSolrClient();
        // 拼裝文字
        SolrInputDocument doc = new SolrInputDocument();
        doc.addField("id", "id");
        // 其他引數省略。。。
        doc.addField("title", "我深深地愛著你,solr");
        sc.add(doc);
        sc.commit();
    }

    // 刪除一條資料
    public static void deleteDocById() throws SolrServerException, IOException {
        // 得到請求
        SolrClient sc = getSolrClient();
        sc.deleteById("0");//id為0的資料
        sc.commit();
    }

    // 刪除全部資料
    private static void deleteAllDoc() throws SolrServerException, IOException {
        // 得到請求
        SolrClient sc = getSolrClient();
        sc.deleteByQuery("*:*");
        sc.commit();
    }

    // 根據id修改一個數據(與新增類似:存在就修改,不存在就新增)
    private static void updateDocById() throws SolrServerException, IOException {
        // 得到請求
        SolrClient sc = getSolrClient();
        // 拼裝文字
        SolrInputDocument doc = new SolrInputDocument();
        doc.addField("id", "id");
        // 其他省略。。。
        doc.addField("title", "我深深地愛著你,solr !");
        sc.add(doc);
        sc.commit();
    }

    // 根據Id查詢一條資料
    private static void getDocById() throws SolrServerException, IOException {
        // 得到請求
        SolrClient sc = getSolrClient();
        SolrDocument sd = sc.getById("id");
        System.out.println(sd); // 列印為:SolrDocument{id=id,
                                // content_test=[我深深地愛著你,solr !],
                                // _version_=1560544234369449984}
        System.out.println(sd.get("id"));
        System.out.println(sd.get("title"));
        System.out.println(sd.get("_version_"));

    }

    // 全部查詢
    private static void getDocByAll() throws SolrServerException, IOException {
        SolrClient sc = getSolrClient();
         SolrQuery query = new SolrQuery();
         //設定查詢條件(全部)
         query.setQuery("*:*");
         //查詢
        SolrDocumentList solrDocumentList =sc.query(query).getResults();
        //遍歷結果集
        for (SolrDocument solrDocument : solrDocumentList) {
            System.out.println(solrDocument); //列印為:SolrDocument{id=id, content_test=[我深深地愛著你,solr !], _version_=1560544234369449984}
            System.out.println(solrDocument.get("id"));
            System.out.println(solrDocument.get("title"));
            System.out.println(solrDocument.get("_version_"));
        }
    }

    public static void main(String[] args) throws SolrServerException,
            IOException {
        // 新增一個索引
        //addDoc();
        // 根據Id刪一條資料
        // deleteDocById();
        // 刪除全部資料
        // deleteAllDoc();
        // 修改一條資料
        // updateDocById();
        // 根據Id查詢一條資料
        // getDocById();
        // 全部查詢
        getDocByAll();
    }

    /**
     * 該物件有兩個可以使用,都是執行緒安全的 1、CommonsHttpSolrServer:啟動web伺服器使用的,通過http請求的 2、
     * EmbeddedSolrServer:內嵌式的,匯入solr的jar包就可以使用了 3、solr
     * 4.0之後好像添加了不少東西,其中CommonsHttpSolrServer這個類改名為HttpSolrClient
     * 
     * @return
     */
    public static SolrClient getSolrClient() {
        return new HttpSolrClient(url + "/" + uri);
    }
}