Solr7.x學習(7)-JAVA操做

maven依賴java

<dependency>
    <groupId>org.apache.solr</groupId>
    <artifactId>solr-solrj</artifactId>
    <version>7.7.2</version>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
</dependency>

Person類apache

package com.zhi.test;

import java.io.Serializable;

import org.apache.solr.client.solrj.beans.Field;

/**
 * 人員信息
 * 
 * @author zhi
 * @time 2016年12月22日09:55:42
 *
 */
@SuppressWarnings("serial")
public class Person implements Serializable {
    /**
     * 主鍵
     */
    @Field
    private String id;
    /**
     * 人員名稱
     */
    @Field
    private String name;
    /**
     * 地址
     */
    @Field
    private String addr;
    /**
     * 年齡
     */
    @Field
    private Integer age;

    public Person() {
        super();
    }

    public Person(String id, String name, String addr, Integer age) {
        super();
        this.id = id;
        this.name = name;
        this.addr = addr;
        this.age = age;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddr() {
        return addr;
    }

    public void setAddr(String addr) {
        this.addr = addr;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

Datas類maven

package com.zhi.test;

import java.util.ArrayList;
import java.util.List;

public class Datas {
    public static List<Person> getPersonData() throws Exception {
        List<Person> list = new ArrayList<Person>();
        list.add(new Person("01", "張三丰", "湖北省浠水縣天虹大廈3樓", 100));
        list.add(new Person("02", "張無忌", "湖北省武漢市中南路300號", 24));
        list.add(new Person("03", "郭靖", "中華人民共和國", 36));
        list.add(new Person("04", "黃蓉", "中國浙江", 17));
        list.add(new Person("05", "楊過", "中國浙江杭州", 25));
        list.add(new Person("06", "周伯通", "中國浙江杭州", 66));
        list.add(new Person("07", "黃老邪", "中國浙江杭州", 54));
        list.add(new Person("08", "歐陽鋒", "湖北省黃石市杭州路900號", 52));
        list.add(new Person("09", "木婉清", "湖北省武漢市陸軍醫院8樓", 19));
        list.add(new Person("10", "蕭峯", "湖北省武漢漢口解決大道33號", 31));
        list.add(new Person("11", "掃地僧", "湖北省武漢市江夏大道99號", 99));
        list.add(new Person("12", "丁春秋", "張家界", 43));

        return list;
    }
}

SolrTest類測試

package com.zhi.test;

import java.util.List;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

/**
 * Solr客戶端測試,需提早建好core
 * 
 * @author zhi
 * @since 2019年9月29日09:02:17
 *
 */
public class SolrTest {
    private Logger logger = LogManager.getLogger(this.getClass());
    private SolrClient solrClient;

    @Before
    public void init() {
        solrClient = new HttpSolrClient.Builder("http://192.168.114.141:8983/solr/").build();
    }

    @After
    public void destroy() {
        try {
            solrClient.close();
        } catch (Exception e) {
            logger.error("關閉SolrClient出錯", e);
        }
    }

    /**
     * 添加一個Document,core中若是定義field,會自動建立對應的field
     */
    @Test
    public void addDoc() {
        try {
            SolrInputDocument document = new SolrInputDocument();
            document.addField("id", "1");
            document.addField("name", "研發中心");
            document.addField("remark", "苦逼集中營");

            UpdateResponse response = solrClient.add("dept", document);
            solrClient.commit("dept"); // 提交,讓保存生效

            logger.info("保存成功,返回的信息:{}", response.toString());
        } catch (Exception e) {
            logger.error("報錯出錯", e);
        }
    }

    /**
     * 查詢Document列表
     */
    @Test
    public void queryDoc() {
        try {
            SolrQuery query = new SolrQuery();
            query.set("q", "name:研發");

            QueryResponse response = solrClient.query("dept", query);
            SolrDocumentList list = response.getResults();
            logger.info("查詢到的數據長度:{}", list.size());
            for (SolrDocument doc : list) {
                logger.info("id={},name={},remark={}", doc.get("id"), doc.get("name"), doc.get("remark"));
            }
        } catch (Exception e) {
            logger.error("查詢出錯", e);
        }
    }

    /**
     * 根據ID刪除Document
     */
    @Test
    public void delDocById() {
        try {
            UpdateResponse response = solrClient.deleteById("dept", "1");
            solrClient.commit("dept"); // 提交,讓刪除生效
            logger.info("刪除成功,返回信息:{}", response.toString());
        } catch (Exception e) {
            logger.error("刪除出錯", e);
        }
    }

    /**
     * 添加對象列表,Bean對象至少有一個字段加上@Field註解。
     * <li>有註解的會自動匹配core中的field(沒有會自動生成field)
     * <li>沒註解的不會生成field,也不會保存(即便core中定義了該名稱的field)
     */
    @Test
    public void addBeans() {
        try {
            UpdateResponse response = solrClient.addBeans("person", Datas.getPersonData());
            solrClient.commit("person"); // 提交,讓保存生效
            logger.info("保存成功,返回消息:{}", response.toString());
        } catch (Exception e) {
            logger.error("保存出錯", e);
        }
    }

    /**
     * 查詢Bean列表,分頁查詢,按id排序且只返回id、code、name3個字段
     */
    @Test
    public void queryBeans1() {
        try {
            SolrQuery query = new SolrQuery();
            query.set("q", "*:*");

            // 設置分頁參數
            query.setStart(0);
            query.setRows(5);

            query.setFields("id", "name", "addr"); // 設置返回字段
            query.setSort("id", SolrQuery.ORDER.asc); // 排序

            QueryResponse response = solrClient.query("person", query);
            List<Person> list = response.getBeans(Person.class);
            logger.info("查詢到的數據長度:{}", list.size());
            for (Person person : list) {
                logger.info("id={},name={},addr={}", person.getId(), person.getName(), person.getAddr());
            }
        } catch (Exception e) {
            logger.error("查詢出錯", e);
        }
    }

    /**
     * 查詢Bean列表,addr包含 武漢,age範圍15到25
     */
    @Test
    public void queryBeans2() {
        try {
            SolrQuery query = new SolrQuery();
            query.set("q", "*:*");

            query.addFilterQuery("age:[15 TO 25]"); // 年齡範圍過濾
            query.addFilterQuery("addr:武漢"); // 地址類似匹配

            QueryResponse response = solrClient.query("person", query);
            List<Person> list = response.getBeans(Person.class);
            logger.info("查詢到的數據長度:{}", list.size());
            for (Person person : list) {
                logger.info("id={},name={},addr={},age={}", person.getId(), person.getName(), person.getAddr(),
                        person.getAge());
            }
        } catch (Exception e) {
            logger.error("查詢出錯", e);
        }
    }

    /**
     * 查詢Bean列表,關鍵字AND、OR必須大寫。與queryBeans2結果一致,只是查詢時機不同
     */
    @Test
    public void queryBeans3() {
        try {
            SolrQuery query = new SolrQuery();
            query.set("q", "age:[15 TO 25] AND addr:武漢");

            QueryResponse response = solrClient.query("person", query);
            List<Person> list = response.getBeans(Person.class);
            logger.info("查詢到的數據長度:{}", list.size());
            for (Person person : list) {
                logger.info("id={},name={},addr={}", person.getId(), person.getName(), person.getAddr());
            }
        } catch (Exception e) {
            logger.error("查詢出錯", e);
        }
    }
}
相關文章
相關標籤/搜索