solr7.0.1的Java项目实现

  上面一章节已经讲完了solr的安装与配置,现在说一下使用solrj来维护solr的索引及操作,solrj就是一个java的客户端,是一个jar包的使用
首先引入MAVEN的依赖,solrj的版本号要对应solr的版本号

 <dependency>
     <groupId>org.apache.solr</groupId>
          <artifactId>solr-solrj</artifactId>
     <version>7.0.1</version>
 </dependency>

一.solr的使用

package com.solr.web.app.util.solr;

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

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

import com.solr.web.app.pay.officeorder.entity.CompanyInfo;
import com.solr.web.app.pay.officeorder.entity.Follow;

public final class FollowTest {

	private static HttpSolrServer server;

	private static final String DEFAULT_URL = "http://localhost:8080/solr/crm_follow";

	public static void init() {
		server = new HttpSolrServer(DEFAULT_URL);
	}

	public static void indexUser(List<Follow> list) {
		try {
			// 添加user bean到索引库
			try {
				UpdateResponse response = server.addBeans(list);
				server.commit();
				System.out.println(response.getStatus());
			} catch (IOException e) {
				e.printStackTrace();
			}
		} catch (SolrServerException e) {
			e.printStackTrace();
		}
	}

	public static void deleteAll() {
		try {
			server.deleteByQuery("*:*");
			server.commit(false, false);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static List<Follow> testQueryAll(String name) {
		List<Follow> followList = null;
		SolrQuery params = new SolrQuery();

		// 查询关键词,*:*代表所有属性、所有值,即所有index
		if (StringUtils.isEmpty(name)) {
			params.set("q", "*:*");
		} else {
			params.set("q", "content:" + name);
		}

		// 分页,start=0就是从0开始,rows=5当前返回5条记录,第二页就是变化start这个值为5就可以了。
		params.set("start", 0);
		params.set("rows", Integer.MAX_VALUE);

		// 排序,如果按照id排序,那么将score desc 改成 id desc(or asc)
		// params.set("sort", "score desc");
		params.set("sort", "id asc");

		// 返回信息*为全部,这里是全部加上score,如果不加下面就不能使用score
		params.set("fl", "*,score");

		QueryResponse response = null;
		try {
			response = server.query(params);
		} catch (SolrServerException | IOException e) {
			e.printStackTrace();
		}

		if (response != null) {
			followList = new ArrayList<Follow>();
			Follow follow = null;
			Map<String, Map<String, List<String>>> map = response.getHighlighting();
			SolrDocumentList list = response.getResults();
			for (int i = 0; i < list.size(); i++) {
				follow = new Follow();
				SolrDocument solrDocument = list.get(i);
				follow.setId(solrDocument.getFieldValue("id").toString());
				follow.setType(solrDocument.getFieldValue("type").toString());
				follow.setContent(solrDocument.getFieldValue("content").toString());
				follow.setRemarks(solrDocument.getFieldValue("remarks").toString());
				followList.add(follow);
			}
		}
		return followList;
	}

	public static void main(String[] args) {
		init();
		//删除全部索引
		deleteAll();
		System.out.println("删除成功--------------------------");
		
		//新增索引
		List<Follow> list = new ArrayList<Follow>();
		Follow follow = new Follow();
		follow.setId("12000");
		follow.setContent("跟进客户,预计明天成单!");
		follow.setType("1");
		follow.setRemarks("明天中午打电话");;
		list.add(follow);
		indexUser(list);
		System.out.println("添加成功--------------------------");
		
		System.out.println("开始查找--------------------------");
		System.out.println(testQueryAll("").get(0).getContent());
	}
}

运行结果:

删除成功--------------------------
添加成功--------------------------
开始查找--------------------------

跟进客户,预计明天成单!


二.solrJ的使用

1.solrJ新增和修改索引

/**
	      * 往索引库添加文档。id不存在,则增加,如果id存在,则是修改。
	     * @throws IOException 
	     * @throws SolrServerException 
	      */
	     public void addDoc(String id) throws SolrServerException, IOException{
	        //构造一篇文档  
	         SolrInputDocument document = new SolrInputDocument();  
	         //往doc中添加字段,在客户端这边添加的字段必须在服务端中有过定义  
	         document.addField("id", id);
	         document.addField("type", "");  
	         document.addField("content", "");  
	         document.addField("remakers", "");  
	         //获得一个solr服务端的请求,去提交  ,选择具体的某一个solr core
	        HttpSolrClient solr = new HttpSolrClient(SOLR_URL);
	        solr.add(document);
	        solr.commit();
	        solr.close();
	     }

2.solrJ删除索引

/** 
	      * 根据id从索引库删除文档 
	      */
	     public void deleteDocumentById() throws Exception {  
	         //选择具体的某一个solr core
	         HttpSolrClient server = new HttpSolrClient(SOLR_URL);  
	         //删除文档  
	         //server.deleteById("1");  
	         //删除所有的索引
	         server.deleteByQuery("*:*");
	         //提交修改  
	         server.commit();  
	         server.close();
	     }  

3.solrJ查找索引

/**
	      * 查询
	     * @throws Exception 
	      */
	     public static List<Follow> querySolr(String name) throws Exception{
	         HttpSolrClient solrServer = new HttpSolrClient(SOLR_URL);  
	         SolrQuery query = new SolrQuery();  
	         //下面设置solr查询参数
	         //query.set("q", "*:*");// 参数q  查询所有   
	         query.set("q",name);//相关查询,比如某条数据某个字段含有周、星、驰三个字  将会查询出来 ,这个作用适用于联想查询

	         //参数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")+"   content:"+doc.get("content")+"    type:"+doc.get("type"));
	         } 

	         //得到实体对象
	         List<Follow> tmpLists = response.getBeans(Follow.class);
	         if(tmpLists!=null && tmpLists.size()>0){
	             System.out.println("通过文档集合获取查询的结果"); 
	             for(Follow per:tmpLists){
	                 System.out.println("id:"+per.getId()+"   content:"+per.getContent()+"    type:"+per.getType());
	             }
	         }
			return tmpLists;
	     }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值