在java中使用solr7.2.0 新旧版本创建SolrClient对比

在Java中使用solr 版本7.2.0

solrj已经更新到了7.2.0,新版本solr获取SolrClient的方式也和之前旧版本有所不同

solr6.5开始不推荐直接使用HttpSolrClient的构造方法创建SolrClient(6.5之前版本的创建方式在页末)

从7.0.0开始删除了HttpSolrClient创建客户端的构造方法,使用内部类Builder构建SolrClient

安装solr:https://my.oschina.net/u/2931319/blog/1595303


import org.apache.solr.client.solrj.SolrServerException;
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.apache.solr.common.params.MapSolrParams;
import org.apache.solr.common.params.SolrParams;
import org.junit.Test;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

/**
 * Java中使用solr
 * @author jaffreyen
 * @date 2018/1/9
 */
public class SolrConnect {

    // solr url
    private final static String BASE_URL = "http://localhost:8081/solr";

    /**
     * 获取SolrClient
     * solrj 6.5及以后版本获取方式
     * @return
     */
    public static HttpSolrClient getSolrClient(){
        /*
         * 设置超时时间
         * .withConnectionTimeout(10000)
         * .withSocketTimeout(60000)
         */
        return new HttpSolrClient.Builder(BASE_URL)
                .withConnectionTimeout(10000)
                .withSocketTimeout(60000)
                .build();
    }

    @Test
    public void testQuery() throws IOException, SolrServerException {
        HttpSolrClient solrClient = getSolrClient();
        // 定义查询条件
        Map<String, String> params = new HashMap<String, String>();
        params.put("q", "*:*");
        SolrParams mapSolrParams = new MapSolrParams(params);
        //执行查询 第一个参数是collection,就是我们在solr中创建的core
        QueryResponse response = solrClient.query("RoleVO", mapSolrParams);
        // 获取结果集
        SolrDocumentList results = response.getResults();
        for (SolrDocument result : results) {
            // SolrDocument 数据结构为Map
            System.out.println(result);
        }
    }

    @Test
    public void testAdd() throws IOException, SolrServerException {
        HttpSolrClient solrClient = getSolrClient();
        // 定义数据 solr输入文档 数据结构为Map
        SolrInputDocument inputDocument = new SolrInputDocument();
        inputDocument.addField("id","123");
        inputDocument.addField("roleName", "角色名称");
        // 执行添加 ps:如果id相同,则执行更新操作
        // 要指定操作的collection 就是solr-home下定义的core
        UpdateResponse add = solrClient.add("RoleVO", inputDocument);
        //提交添加/更新
        solrClient.commit("RoleVO");
    }

    @Test
    public void testDelete() throws IOException, SolrServerException {
        HttpSolrClient solrClient = getSolrClient();
        // 通过id删除 执行要删除的collection(core)
        solrClient.deleteById("RoleVO", "123");
        // 还可以通过查询条件删除
        // solrClient.deleteByQuery("RoleVO", "查询条件");
        // 提交删除
        solrClient.commit("RoleVO");
    }
}

solrj6.5之前的初始化SolrClient方式

直接使用HttpSolrClient的构造方法初始化

/**
     * 获取SolrClient
     * solrj 6.5以前的获取方式
     * @return
     */
    public static HttpSolrClient getSolrClient(){
        return new HttpSolrClient(BASE_URL);
    }

这只是最基本的使用,接下来我会封装一个solr查询工具类,可以非常方便的使用solr

solr的查询语法随后也会发出来

猜你喜欢

转载自my.oschina.net/u/2931319/blog/1604898
今日推荐