Solr【7.5】集群在IDEA中xml的配置以及使用

本文详细介绍Solr集群的配置方法,包括单机版和集群版的XML配置,所需jar包,以及通过Java代码实现的Solr集群测试,涵盖文档添加和查询功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、 Solr在XML中的配置

  •  <!-- 单机版solr服务配置 -->
        <bean id="builder" class="org.apache.solr.client.solrj.impl.HttpSolrClient.Builder">
            <constructor-arg name="baseSolrUrl" value="http://192.168.25.120:8080/solr/coremain" />
        </bean>
        <bean factory-bean="builder" factory-method="build" id="httpSolrClient"/>
    <!-- 集群版solr服务 -->
        <bean id="empty_builder" class="org.apache.solr.client.solrj.impl.CloudSolrClient.Builder" />
        <bean id="builder" factory-bean="empty_builder" factory-method="withZkHost">
            <constructor-arg value="192.168.229.128:2181,192.168.229.128:2182,192.168.229.128:2183" type="java.lang.String" />
        </bean>
        <bean id="cloudSolrClient" factory-bean="builder" factory-method="build">
            <property name="defaultCollection" value="collection"></property>
        </bean>

二、所需要的jar包

<!--Solr客户端-->
<dependency>
    <groupId>org.apache.solr</groupId>
    <artifactId>solr-solrj</artifactId>
    <version>7.5.0</version>
</dependency>

 

三、Solr集群的测试类

 

  • package XX.XXXXX.XXXXX;
    
    import org.apache.solr.client.solrj.SolrQuery;
    import org.apache.solr.client.solrj.impl.CloudSolrClient;
    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;
    import org.junit.Test;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Optional;
    
    /**
     * @author Mr.Li
     * @version 1.0
     * @Description: Solr集群测试
     * @Modified By:
     * @date 2018/12/5 17:51
     */
    public class TestSolrCloud {
    
        //简单添加
        @Test
        public void testAddDocument() throws Exception{
            // 第一步:把solrJ相关的jar包添加到工程中。
            // 第二步:创建一个SolrClient对象,需要使用CloudSolrServer子类。构造方法的参数是zookeeper的地址列表。
            // 参数是zookeeper的地址列表
            List<String> zkHost=new ArrayList<>();
            zkHost.add("192.168.229.128:2181");
            zkHost.add("192.168.229.128:2182");
            zkHost.add("192.168.229.128:2183");
            //builder的构造函数需要一个List和一个Optional
            Optional<String> zkChroot = Optional.of("/");
            CloudSolrClient solrClient = new CloudSolrClient.Builder(zkHost,zkChroot)
                    .withConnectionTimeout(10000)
                    .withSocketTimeout(60000)
                    .build();
            // 第三步:需要设置DefaultCollection属性,里边的名字和自己创建的collection名字相同
            solrClient.setDefaultCollection("collection");
            // 第四步:创建一SolrInputDocument对象
            SolrInputDocument document = new SolrInputDocument();
            // 第五步:向文档对象中添加域
            document.addField("id","solrcloud01");
            document.addField("item_title", "测试商品01");
            document.addField("item_price", 123);
            // 第六步:把文档对象写入索引库。
            solrClient.add(document);
            // 第七步:提交。
            solrClient.commit();
        }
    
        //简单查询
        @Test
        public void testQueryDocument() throws Exception{
            // 第一步:把solrJ相关的jar包添加到工程中。
            // 第二步:创建一个SolrClient对象,需要使用CloudSolrServer子类。构造方法的参数是zookeeper的地址列表。
            // 参数是zookeeper的地址列表
            List<String> zkHost=new ArrayList<>();
            zkHost.add("192.168.229.128:2181");
            zkHost.add("192.168.229.128:2182");
            zkHost.add("192.168.229.128:2183");
            //builder的构造函数需要一个List和一个Optional
            Optional<String> zkChroot=Optional.of("/");
            CloudSolrClient solrClient=new CloudSolrClient.Builder(zkHost,zkChroot)
                    .withConnectionTimeout(10000)
                    .withSocketTimeout(60000)
                    .build();
            // 第三步:需要设置DefaultCollection属性,里边的名字和自己创建的collection名字相同
            solrClient.setDefaultCollection("collection");
            // 第四步:创建一个查询对象
            SolrQuery query=new SolrQuery();
            // 第五步:设置查询条件
            query.setQuery("*:*");
            // 第六步:执行查询
            QueryResponse queryResponse = solrClient.query(query);
            // 第七步:取查询结果
            SolrDocumentList solrDocumentList = queryResponse.getResults();
            System.out.println("总记录数:" + solrDocumentList.getNumFound());
            // 第八步:打印
            for (SolrDocument solrDocument:solrDocumentList){
                System.out.println(solrDocument.get("id"));
                System.out.println(solrDocument.get("title"));
                System.out.println(solrDocument.get("item_tile"));
                System.out.println(solrDocument.get("item_price"));
            }
        }
    }
    

四、集群的实现

 

package cn.e3mall.search.dao;

import cn.e3mall.common.pojo.SearchItem;
import cn.e3mall.common.pojo.SearchResult;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.impl.CloudSolrClient;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

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

/**
 * @author Mr.Li
 * @version 1.0
 * @Description: 商品搜索Dao
 * @Modified By:
 * @date 2018/12/5 0:14
 */

@Repository
public class SearchDao {

    /**
     * 在不使用spring进行配置solr的情况下可以这么写单机版的solr
     * final String solrUrl="http://localhost:8080/solr/index.html#/new_core";
     *     HttpSolrClient solrClient = new HttpSolrClient.Builder(solrUrl)
     *             .withConnectionTimeout(10000)
     *             .withSocketTimeout(60000)
     *             .build();
     */



    /**
     * @Autowired
     * 在spring中进行了Solr单机版配置
     * HttpSolrClient solrClient;
     */


    /**
     * 我们现在使用集群版
     */
    @Autowired
    CloudSolrClient solrClient;

    /**
     * 根据查询条件查询索引库
     * @param query
     * @return
     */
    public SearchResult search(SolrQuery query) throws Exception{
        //根据query查询索引库
        QueryResponse queryResponse=solrClient.query(query);
        //取查询结果
        SolrDocumentList solrDocumentList = queryResponse.getResults();
        //取查询结果总记录数
        long numFound = solrDocumentList.getNumFound();
        SearchResult searchResult=new SearchResult();
        searchResult.setRecordCount(numFound);
        //取商品列表,需要取高亮显示
        Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
        List<SearchItem> itemList=new ArrayList<>();
        for (SolrDocument solrDocument:solrDocumentList){
            SearchItem item=new SearchItem();
            item.setId((String) solrDocument.get("id"));
            item.setCategory_name((String) solrDocument.get("item_category_name"));
            item.setImage((String) solrDocument.get("item_image"));
            item.setPrice((Long) solrDocument.get("item_price"));
            item.setSell_point((String) solrDocument.get("item_sell_point"));
            //取高亮显示
            List<String> list = highlighting.get(solrDocument.get("id")).get("item_title");
            String title = "";
            if (list != null && list.size() > 0) {
                title = list.get(0);
            } else {
                title = (String) solrDocument.get("item_title");
            }
            item.setTitle((String) solrDocument.get("item_title"));
            //添加到上商品列表
            itemList.add(item);
        }
        searchResult.setItemList(itemList);
        //返回结果
        return searchResult;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值