实战全局搜索框架Solr

solr安装启动

这里演示的是Windows下的安装 Linux下安装同理

下载地址:http://lucene.apache.org/solr

测试版本:solr-4.10.3    apache-tomcat-7.0.47(由于solr自带服务器不稳定)

下载解压后在文件 D:\Solr\solr-4.10.3\example\webapps中找到solr的war包

将其放入tomcat webapp目录下

修改D:\Solr\apache-tomcat-7.0.47\webapps\solr\WEB-INF 下的web.xml中存放solr家的位置

将D:\Solr\solr-4.10.3\example\solr中collection文件复制到指定位置↑

再在Tomcat的webapps\solr\WEB-INF\lib中导入solr启动所需依赖:

启动Tomcat 测试是否成功http://localhost:8080/solr/

IK分析器

由于solr自带的几种中文分析器 不能满足我们的中文分词需求 现配置IKAnalyzer分析器 配置如下:

找到所配置配置solr核(collection1)的位置 在其config文件中schema.xml 添加内容:

在Tomcat的webapps\solr\WEB-INF中创建classes文件夹(相当于src资源文件),用于存放IKAnalyzer分析器的扩展配置

创建IkAnalyzer.cfg.xml文件 配置扩展字典的存放位置 

创建其余两个.dic文件存放所需数据 启动Tomcat 打开网站查看是否成功

solr后台管理界面数据的导入

在collection1文件夹中创建lib文件夹,用以存放所需jar包(2个solr自带包 1个mysql驱动包)

在collection1\conf文件下 打开solrconfig.xml添加如下配置:

再在当前目录创建data-config.xml文件 添加数据库配置:

打开schema.xml 添加product配置

配置完成后打开solr后台管理界面

SolrJ

solrJ是访问Solr服务的JAVA客户端,提供索引和搜索的请求方法,SolrJ通常嵌入在业务系统中,通过solrJ的API接口操作Solr服务。

准备工作:

将solr-4.10.3\dist\solrj-lib的所有jar包

solr-4.10.3\dist下solr-solrj-4.10.3.jar(solr核心包)

solr-4.10.3\example\lib\ext下的所有jar包

放入eclipse(创建一个Java工程 添加lib文件)

案例:添加 删除 修改 查询(高亮)

public class TestSolrJ {
	//添加&修改(id相同 就是修改 不同就是添加)
	@Test
	public void Testname()throws Exception{
		//创建Solr的客户端链接对象
		String baseURL="http://localhost:8080/solr/";
		//单机版
		SolrServer solrServer = new HttpSolrServer(baseURL);
		//创建一个文档对象
		SolrInputDocument doc = new SolrInputDocument();
		doc.setField("id", "111");    //域(要存在) 值
		doc.setField("name", "张叁");  
		//doc.addField("name", "用法一样");
		
		//添加
		solrServer.add(doc);
		solrServer.commit();
	}
	
	//删除
		@Test
		public void Deletename()throws Exception{
			//创建Solr的客户端链接对象
			String baseURL="http://localhost:8080/solr/";
			SolrServer solrServer = new HttpSolrServer(baseURL);
			solrServer.deleteById("111");   		//删除id为111的
			solrServer.deleteByQuery("name:张叁"); 	//根据条件删除
			
			solrServer.commit();
		
		}
		
	//查询
		@Test
		public void Queryename()throws Exception{
			//创建Solr的客户端链接对象
			String baseURL="http://localhost:8080/solr/";
			SolrServer solrServer = new HttpSolrServer(baseURL);
			
			//创建solr的查询对象
	        SolrQuery sq=new SolrQuery();
	        //设置查询条件
	        sq.set("q","name:李四" );
	     	//多条件查询
//	        sq.set("q","name:李四 AND age:18  OR phone:110" );
	        //设置过滤条件
//	        sq.set("fq", "age:[1 TO 20]");
	        //设置排序
//	        sq.addSort("wages", ORDER.desc);
	        //设置分页
//	        sq.setStart(0);		//开始位置
//	        sq.setRows(5);		//每页3条
	        //开启高亮
	        sq.setHighlight(true);
	        sq.addHighlightField("item_title");//设置高亮域
	        sq.setHighlightSimplePre("<div style='color:red'>");//前缀
	        sq.setHighlightSimplePost("</div>");//后缀
	        
	        //查询
	        QueryResponse qr=solrServer.query(sq);
	        //获取查询结果
	        SolrDocumentList sds=qr.getResults();
	        //获取查询的记录数
	        long index=sds.getNumFound();
	        System.out.println("数量:"+index);
	        for(SolrDocument sd:sds){//默认取出10条记录
	            String id=(String) sd.getFieldValue("id");
	            String name=(String) sd.getFieldValue("name");
	            System.out.println("我是华丽丽的分割线====================================");
	            System.out.println("id:"+id);
	            System.out.println("name:"+name);
	            
	            
	            //获取高亮显示的结构
	            Map<String, Map<String, List<String>>> highlighting=qr.getHighlighting();
	            if(highlighting!=null){
	                //根据Id获得每个域的高亮内容
	                Map<String, List<String>> map=highlighting.get(id);
	                //根据具体的域获取高亮内容
	                List<String> list=map.get("name");
	                if(list!=null && !list.isEmpty()){
	                    for(String str:list){
	                        System.out.println("高亮内容:"+str);
	                    }  
	                }
	            }
	         }
	        
		}
}

SolrJ(与spring整合)

首先在spring配置文件(application-solr)中配置相关的Ben 

<bean id="httpSolrServer" class="org.apache.solr.client.solrj.impl.HttpSolrServer">
		<constructor-arg index="0" value="http://ip地址:solr服务的Tomcat端口号/solr/collection1"/>
</bean>

再通过注解@Autowired 注入SolrServer

然后调用其.add方法就可以吧对象写入索引库 记得.commit提交

猜你喜欢

转载自blog.csdn.net/GuiSu97/article/details/84290858
今日推荐