javaEE solr,solrJ,solr集群

solr,solrJ的Jar包下载:https://pan.baidu.com/s/1ekc7ZWqukUjkSXxQp09hDA  密码:yvj3

参考:https://blog.csdn.net/houyanhua1/article/details/82873475

solr索引库同步时(ActiveMQ),如果在发送消息后,数据库的事务还没提交。那么消费者可能会出现空指针异常。可以让消费者sleep解决。也可以让事务提交后(web表现层发送消息)生产者再发送消息解决。

Test.java(测试类,solrJ,solr集群):

package cn.e3mall.solrj;

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.impl.CloudSolrServer;
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;

public class Test {

	@Test
	//添加/修改文档(索引) 
	public void testAddDocument() throws Exception {
		//创建一个zookeeper集群的连接,使用CloudSolrServer创建。  zkHost:zookeeper的地址列表
		CloudSolrServer solrServer = new CloudSolrServer("192.168.25.163:2181,192.168.25.163:2182,192.168.25.163:2183");
		//设置一个defaultCollection属性。
		solrServer.setDefaultCollection("collection2");
		//以下步骤与单机版Solr一致。
		//创建一个文档对象
		SolrInputDocument document = new SolrInputDocument();
		//向文档中添加域
		document.setField("id", "solrcloud01");
		document.setField("item_title", "测试商品01");
		document.setField("item_price", 123);
		//把文件写入索引库
		solrServer.add(document);
		//提交
		solrServer.commit();
		
	}
	
	@Test
	//查询文档
	public void testQueryDocument() throws Exception {
		//创建一个CloudSolrServer对象
		CloudSolrServer cloudSolrServer = new CloudSolrServer("192.168.25.163:2181,192.168.25.163:2182,192.168.25.163:2183");
		//设置默认的Collection
		cloudSolrServer.setDefaultCollection("collection2");
		//创建一个查询对象
		SolrQuery query = new SolrQuery();
		//设置查询条件
		query.setQuery("*:*");
		//执行查询
		QueryResponse queryResponse = cloudSolrServer.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_title"));
			System.out.println(solrDocument.get("item_price"));
		}
	}
	
}

applicationContext.xml(Spring核心配置文件):

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
	http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd">

	<!-- 单机版solrJ -->
	<!-- <bean id="httpSolrServer" class="org.apache.solr.client.solrj.impl.HttpSolrServer">
		<constructor-arg index="0" value="http://192.168.25.163:8080/solr/collection1"/>
	</bean> -->
	<!-- 集群版solrJ -->
	<bean id="cloudSolrServer" class="org.apache.solr.client.solrj.impl.CloudSolrServer">
		<constructor-arg index="0" value="192.168.25.163:2181,192.168.25.163:2182,192.168.25.163:2183"></constructor-arg>  <!-- 集群版zookeeper的地址 -->
		<property name="defaultCollection" value="collection2"></property>  <!-- 指定默认collection -->
	</bean>
</beans>

SearchItemServiceImpl.java(业务层实现类,根据数据库创建索引库,索引库的维护。数据库修改要同步更新索引库(ActiveMQ)):

package cn.e3mall.search.service.impl;
 
import java.util.List;
 
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.common.SolrInputDocument;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import cn.e3mall.common.pojo.SearchItem;
import cn.e3mall.common.utils.E3Result;
import cn.e3mall.search.mapper.ItemMapper;
import cn.e3mall.search.service.SearchItemService;
 
/**
 * 索引库维护Service
 * <p>Title: SearchItemServiceImpl</p>
 * <p>Description: </p>
 * <p>Company: www.itcast.cn</p> 
 * @version 1.0
 */
@Service
public class SearchItemServiceImpl implements SearchItemService {
 
	@Autowired
	private ItemMapper itemMapper;
	@Autowired
	private SolrServer solrServer;
	
	@Override
	public E3Result importAllItems() {
		try {
			//从数据库中查询商品列表  (基于Mybatis)
			List<SearchItem> itemList = itemMapper.getItemList();
			//遍历数据库中的商品列表,并依次创建文档添加到SolrServer中
			for (SearchItem searchItem : itemList) {
				//创建文档对象
				SolrInputDocument document = new SolrInputDocument();
				//向文档对象中添加域
				document.addField("id", searchItem.getId());
				document.addField("item_title", searchItem.getTitle());
				document.addField("item_sell_point", searchItem.getSell_point());
				document.addField("item_price", searchItem.getPrice());
				document.addField("item_image", searchItem.getImage());
				document.addField("item_category_name", searchItem.getCategory_name());
				//把文档对象写入索引库
				solrServer.add(document);
			}
			//提交
			solrServer.commit();
			//返回导入成功
			return E3Result.ok();
		} catch (Exception e) {
			e.printStackTrace();
			return E3Result.build(500, "数据导入时发生异常");
					
		}
	}
 
}

猜你喜欢

转载自blog.csdn.net/houyanhua1/article/details/83351646