天天看点

solr的基本使用个人总结

solr和lucence的区别:

lucence:基于java开发的全文检索API,需要自己管理和维护索引库、索引库的优化、缓存的添加

solr:基于lucence的全文检索服务器,能帮助我们维护索引库,自动完成缓存的添加等

solr服务器的搭建流程:

1.首先服务器中需要有jdk自行安装即可(百度教程很多)

2.将途中的压缩包放到服务器中(ALT+P 然后直接将文件拖进去)

solr的基本使用个人总结

3.此时系统目录会有solr压缩包,执行解压命令: tar zxf solr-4.10.3.tgz.tgz

4.执行解压命令之后,将解压后的文件复制到指定目录下

solr的基本使用个人总结

5.将solr文件中的solr-4.10.3.war复制到tomcat的webapps目录下

solr的基本使用个人总结

6.启动tomcat之后 .war文件将会自动解压,第二句是查看控制台语句

solr的基本使用个人总结

7.将 solr-4.10.3中 example/lib/ext/目录下的所有jar包复制到指定目录下

solr的基本使用个人总结

8.配置solrhome

solr的基本使用个人总结

9.把solrhome的地址告诉solr,推介修改solr的web.xml即可

solr的基本使用个人总结
solr的基本使用个人总结

solr导入索引库,可以用数据库的id,相当于solr中的主键,id不重复正好可以用

导入索引库的流程:

1.将中文分词器导入到服务器

solr的基本使用个人总结

2.将IK文件中的IKAnalyzer2012FF_u1.jar复制到指定目录

solr的基本使用个人总结

3.需要将下图中的文件放到classes目录下,没有那就创建即可

solr的基本使用个人总结

复制

solr的基本使用个人总结

4. 在cd /usr/local/solr/solrhome/目录下 定义filed Type

solr的基本使用个人总结

schema.xml中定义了solr中所有的域

5.在schema.xml文件的末尾指定自定义中文分词器

solr的基本使用个人总结

6.定义自己的业务域

中文分词器的作用就是根据内容的一部分来搜索内容

注:String-field类型不分词,但是建立索引,例如订单号之类的

text-field既分词也建立索引,是否存储取决于参数

solr的基本使用个人总结

(可选择配置或不配置都可以)复制域,将所有的域复制过来统一管理,它包含其他域的全部内容,通过一个关键字搜索就行

这一步结束,业务域就配置完成了

然后重启tomcat

导入索引库:

solr的基本使用个人总结

新建一个taotao-searchmaven工程 打包pom

在新建一个maven模块taotao-search-interface 打包jar

新建一个maven模块taotao-search-service 打包war

然后参考taotao-content进行配置

solr的基本使用个人总结

配置taotao-search-interface ,pom文件对应content工程修改即可

solr的基本使用个人总结
solr的基本使用个人总结

由于是多表查询,需要自己写mapper映射文件的SQL语句 例:

SELECT

a.`id`,

a.`title`,

a.`sell_point`,

a.`price`,

a.`image`,

b.`name` category_name,

c.`item_desc`

FROM tb_item a

LEFT JOIN tb_item_cat b ON a.cid=b.id

LEFT JOIN tb_item_desc c ON a.id=c.item_id

WHERE a.`status`=1

自定义mapper文件的创建  可以参考随后更新的文章

下面接着说solrj(solr的java客户端的使用)

》导入solrj依赖

》编写测试代码

package com.taotao.solrj;

import org.apache.solr.client.solrj.SolrServer;

import org.apache.solr.client.solrj.impl.HttpSolrServer;

import org.apache.solr.common.SolrInputDocument;

import org.junit.Test;

public class TestSolrJ {

//添加索引

@Test

public void TestAddDocument() throws Exception{

//创建一个solrserver(抽象类)创建一个单机版HttpsolrServer对象

//需要指定solr服务的url

SolrServer solrServer=new HttpSolrServer("http://192.168.25.128:8080/solr/collection1");

//创建一个文档对象SolrInputDocument

SolrInputDocument document=new SolrInputDocument();

//向文档中添加域,必须有id域,域的名称必须在schema.xml文件中指定

document.addField("id", "test001");

document.addField("item_title", "测试商品");

document.addField("item_price", 1000);

//把文档对象写入索引库

solrServer.add(document);

// 提交

solrServer.commit();

}

}

》浏览器客户端的查询结果,显示已经添加成功
solr的基本使用个人总结

》删除索引

**

* 根据id删除

* @throws Exception

*/

@Test

public void deleteDocumentById()throws Exception{

//创建一个solrserver(抽象类)创建一个单机版HttpsolrServer对象

//需要指定solr服务的url

SolrServer solrServer=new HttpSolrServer("http://192.168.25.128:8080/solr/collection1");

//执行删除

solrServer.deleteById("test001");

//提交

solrServer.commit();

}

@Test

public void deleteDocumentByQuery()throws Exception{

//创建一个solrserver(抽象类)创建一个单机版HttpsolrServer对象

//需要指定solr服务的url

SolrServer solrServer=new HttpSolrServer("http://192.168.25.128:8080/solr/collection1");

solrServer.deleteByQuery("id:123");

//提交

solrServer.commit();

}

使用solrJ进行查询搜索的示例:

@Test

public void searchDocument()throws Exception{

//创建一个Solrserver对象

SolrServer solrServer=new HttpSolrServer("http://192.168.25.128:8080/solr/collection1");

//创建一个solrQuery对象

SolrQuery query=new SolrQuery();

//设置查询条件,过滤条件,分页条件,排序条件,高亮显示

//set方法是一个通用方法,什么属性都可以设置

//query.set("q", "*:*");

//分页条件

query.setQuery("手机");//查询条件

query.setStart(30);//起始记录数

query.setRows(20);//每页显示的记录数

//设置默认搜索域

query.set("df", "item_keywords");

//设置高亮

query.setHighlight(true);

//高亮显示的域

query.addHighlightField("item_title");

query.setHighlightSimplePre("<div>");//前缀

query.setHighlightSimplePost("<div>");//后缀

//执行查询,得到一个Response对象

QueryResponse response = solrServer.query(query);

//取查询结果

SolrDocumentList solrDocumentList = response.getResults();//是一个ArrayList,可遍历

//取查询结果总记录数

System.out.println("查询结果总记录数: "+solrDocumentList.getNumFound());

for (SolrDocument solrDocument : solrDocumentList) {

System.out.println(solrDocument.get("id"));

//取高亮显示

Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();

List<String> list = highlighting.get(solrDocument.get("id")).get("item_title");

String itemTitle="";

if(list!=null&&list.size()>0){

itemTitle=list.get(0);

}else{

itemTitle = (String) solrDocument.get("item_title");

}

System.out.println(itemTitle);

System.out.println(solrDocument.get("item_title"));

System.out.println(solrDocument.get("item_sell_point"));

System.out.println(solrDocument.get("item_price"));

System.out.println(solrDocument.get("item_image"));

//分类名称

System.out.println(solrDocument.get("item_category_name"));

System.out.println("------------------------------------------------------");

}

}

继续阅读