概述
WEB项目中搜索功能是必不可少的,然而如果我们每次搜索都去数据库查询,将极大浪费性能,因此,我们需要一个全文搜索服务器——Solr。本博文将详细介绍Solr服务的搭建搜索功能的实现。
一、Solr
1.Solr简介
Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。
Solr可以独立运行,运行在Jetty、Tomcat等这些Servlet容器中,Solr 索引的实现方法很简单,用 POST 方法向 Solr 服务器发送一个描述 Field 及其内容的 XML 文档,Solr根据xml文档添加、删除、更新索引 。Solr 搜索只需要发送 HTTP GET 请求,然后对 Solr 返回Xml、json等格式的查询结果进行解析,组织页面布局。Solr不提供构建UI的功能,Solr提供了一个管理界面,通过管理界面可以查询Solr的配置和运行情况。
简单来说,就是Solr是一个全文检索服务器,只需要进行配置就可以实现全文检索服务。
2.Solr的安装及配置
详细安装过程及配置参照另一篇博客《Linux下Solr的安装及配置(CentOS为例)》
3.Solr界面功能
4.维护索引库
添加:添加一个json格式的文件就可以。
修改:在solr中没有update,只需要添加一个新的文档,要求文档id和被修改文档的id一致。原理是先删除后添加。
删除:使用xml格式。
删除两种方法:
1、根据id删除:
<delete>
<id>test001</id>
</delete>
<commit/>
2、根据查询删除:
<delete>
<query>*:*</query>
</delete>
<commit/>
5.SolrJ客户端
SolrJ是一个使Java应用程序可以轻松与Solr对话的API。SolrJ隐藏了许多连接到Solr的细节,并允许您的应用程序通过简单的高级方法与Solr进行交互。
maven工程需要依赖solrj的jar包
<!-- solr客户端 -->
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
</dependency>
solrj的使用
public class SolrJTest {
@Test
public void addDocument() throws Exception{
//创建一个连接
SolrServer solrServer = new HttpSolrServer("http://192.168.10.130:8080/solr");
//创建一个文档对象
SolrInputDocument document = new SolrInputDocument();
document.addField("id", "test001");
document.addField("item_title", "测试视频");
document.addField("item_price", 53156);
//把文档对象写入索引库
solrServer.add(document);
//提交
solrServer.commit();
}
@Test
public void deleteDocument() throws Exception{
SolrServer solrServer = new HttpSolrServer("http://192.168.10.130:8080/solr");
//solrServer.deleteById("test001");
solrServer.deleteByQuery("*:*");//删除所有
solrServer.commit();
}
@Test
public void queryDocument() throws Exception{
SolrServer solrServer = new HttpSolrServer("http://192.168.10.130:8080/solr");
//创建一个查询对象
SolrQuery query = new SolrQuery();
//设置查询条件
query.setQuery("*:*");
//设置分页参数
query.setStart(20);
query.setRows(20);
//执行查询
QueryResponse response = solrServer.query(query);
//去查询结果
SolrDocumentList solrDocumentList = response.getResults();
System.out.println("共查到记录:"+solrDocumentList.getNumFound());
for (SolrDocument solrDocument : solrDocumentList) {
System.out.println(solrDocument.get("id"));
System.out.println(solrDocument.get("item_title"));
System.out.println(solrDocument.get("item_price"));
System.out.println(solrDocument.get("item_image"));
}
}
}
二、把商品信息导入到索引库
使用java程序读取mysql数据库中的商品信息,然后创建solr文档对象,把商品信息写入索引库。
需要发布一个服务。 为了灵活的进行分布式部署需要创建一搜素的服务工程发布 搜素服务。Taotao-search。
1.系统架构
2.创建taotao-search工程

配置:
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.taotao</groupId>
<artifactId>taotao-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>