Solr之java實現增刪查操作


1、添加pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.yangwj</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.M1</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.solr/solr-solrj -->
        <dependency>
            <groupId>org.apache.solr</groupId>
            <artifactId>solr-solrj</artifactId>
            <version>7.7.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpmime -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpmime</artifactId>
            <version>4.5.7</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.6</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
            <version>4.4.10</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.noggit/noggit -->
        <dependency>
            <groupId>org.noggit</groupId>
            <artifactId>noggit</artifactId>
            <version>0.8</version>
        </dependency>

        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
       <groupId>org.codehaus.woodstox</groupId>
            <artifactId>stax2-api</artifactId>
            <version>3.1.4</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.woodstox</groupId>
            <artifactId>woodstox-core-asl</artifactId>
            <version>4.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.7.7</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.0.4</version>
        </dependency>

    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>


</project>

2、創建Person.java類

package com.yangwj.demo.Solr;

import org.apache.solr.client.solrj.beans.Field;
public class Person {

    @Field(value="id")
    private String id;

    @Field(value="name")
    private String name;

    @Field(value="description")
    private String description;

    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 getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

}

3、創建SolrUtil.java文件

package com.yangwj.demo.Solr;

import java.io.IOException;
import java.util.List;

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.client.solrj.impl.HttpSolrClient.Builder;
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;


public class SolrUtil {
    //指定solr服務器的地址
    private final static String SOLR_URL = "http://192.168.56.130:8983/solr/";

    /**
     * 創建SolrServer對象
     *
     * 該對象有兩個可以使用,都是線程安全的
     * 1、CommonsHttpSolrServer:啟動web服務器使用的,通過http請求的
     * 2、 EmbeddedSolrServer:內嵌式的,導入solr的jar包就可以使用了
     * 3、solr 4.0之后好像添加了不少東西,其中CommonsHttpSolrServer這個類改名為HttpSolrClient
     *
     * @return
     */
    public HttpSolrClient createSolrServer(){
        HttpSolrClient solr = null;
        solr = new HttpSolrClient.Builder(SOLR_URL).withConnectionTimeout(10000).withSocketTimeout(60000).build();
        return solr;
    }


    /**
     * 往索引庫添加文檔
     * @throws IOException
     * @throws SolrServerException
     */
    public void addDoc() throws SolrServerException, IOException{
        //構造一篇文檔
        SolrInputDocument document = new SolrInputDocument();
        //往doc中添加字段,在客戶端這邊添加的字段必須在服務端中有過定義
        document.addField("id", "9");
        document.addField("name", "yangwenjie");
        document.addField("description", "a code man");
        //獲得一個solr服務端的請求,去提交  ,選擇具體的某一個solr core
        HttpSolrClient solr = new HttpSolrClient.Builder(SOLR_URL + "new_core").withConnectionTimeout(10000).withSocketTimeout(60000).build();
        solr.add(document);
        solr.commit();
        solr.close();
    }


    /**
     * 根據id從索引庫刪除文檔
     */
    public void deleteDocumentById() throws Exception {
        //選擇具體的某一個solr core
        HttpSolrClient server = new HttpSolrClient.Builder(SOLR_URL + "new_core").withConnectionTimeout(10000).withSocketTimeout(60000).build();
        //刪除文檔
        server.deleteById("8");
        //刪除所有的索引
        //solr.deleteByQuery("*:*");
        //提交修改
        server.commit();
        server.close();
    }

    /**
     * 查詢
     * @throws Exception
     */
    public void querySolr() throws Exception{
        HttpSolrClient solrServer = new HttpSolrClient.Builder(SOLR_URL + "new_core/").withConnectionTimeout(10000).withSocketTimeout(60000).build();
        SolrQuery query = new SolrQuery();
        //下面設置solr查詢參數
        //query.set("q", "*:*");// 參數q  查詢所有
        query.set("q","yangwenjie");//相關查詢,比如某條數據某個字段含有周、星、馳三個字  將會查詢出來 ,這個作用適用於聯想查詢

        //參數fq, 給query增加過濾查詢條件
        query.addFilterQuery("id:[0 TO 9]");//id為0-4

        //給query增加布爾過濾條件
        //query.addFilterQuery("description:演員");  //description字段中含有“演員”兩字的數據

        //參數df,給query設置默認搜索域
        query.set("df", "name");

        //參數sort,設置返回結果的排序規則
        query.setSort("id",SolrQuery.ORDER.desc);

        //設置分頁參數
        query.setStart(0);
        query.setRows(10);//每一頁多少值

        //參數hl,設置高亮
        query.setHighlight(true);
        //設置高亮的字段
        query.addHighlightField("name");
        //設置高亮的樣式
        query.setHighlightSimplePre("<font color='red'>");
        query.setHighlightSimplePost("</font>");

        //獲取查詢結果
        QueryResponse response = solrServer.query(query);
        //兩種結果獲取:得到文檔集合或者實體對象

        //查詢得到文檔的集合
        SolrDocumentList solrDocumentList = response.getResults();
        System.out.println("通過文檔集合獲取查詢的結果");
        System.out.println("查詢結果的總數量:" + solrDocumentList.getNumFound());
        //遍歷列表
        for (SolrDocument doc : solrDocumentList) {
            System.out.println("id:"+doc.get("id")+"   name:"+doc.get("name")+"    description:"+doc.get("description"));
        }

        //得到實體對象
        List<Person> tmpLists = response.getBeans(Person.class);
        if(tmpLists!=null && tmpLists.size()>0){
            System.out.println("通過文檔集合獲取查詢的結果");
            for(Person per:tmpLists){
                System.out.println("id:"+per.getId()+"   name:"+per.getName()+"    description:"+per.getDescription());
            }
        }
    }

    public static void main(String[] args) throws Exception {
        SolrUtil solr = new SolrUtil();
        //solr.createSolrServer();
        //solr.addDoc();
        //solr.deleteDocumentById();
        solr.querySolr();
    }
}

4、如果出現錯誤,一般是pom.xml中的jar包太低,因此需要更高版本的包。


免責聲明!

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



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