Solr_全文检索引擎系统
Solr介绍:
Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务。Solr可以独立运行在Jetty、Tomcat等这些Servlet容器中。
Solr的作用:
solr是一个现成的全文检索引擎系统, 放入tomcat下可以独立运行, 对外通过http协议提供全文检索服务(就是对索引和文档的增删改查服务), 在代码中可以通过solrJ(solr的客户端的jar包)来调用solr服务。
Lucene和solr的区别:
lucene是一个全文检索引擎工具包, 就是一堆jar包, 它放入tomcat下不能独立运行, 但是我们可以使用lucene来构建全文检索引擎系统;
solr底层是用lucene来开发的一个全文检索引擎系统, 放入tomcat下就可以独立运行, 对外通过http的形式,提供全文检索服务(索引和文档的增删改查服务)。
在Tomcat容器中部署solr工程的步骤:
1、下载solr压缩包,下载地址:http://archive.apache.org/dist/lucene/solr/(我这里使用的是solr-4.10.3);
2、准备好一个干净的Tomcat容器,并配置好JDK;
3、找到solr解压后的目录,将solr-4.10.3examplewebapps目录下的solr.war包放进Tomcat容器中运行,直接运行的目的是解压该war包,解压好之后关闭Tomcat容器并删除war包(必须要删除war包,否则再次运行时就覆盖了以前配置好的solr服务),开始部署solr服务;
4、找到solr解压后的目录,将solr-4.10.3examplelibext目录下的所有jar包复制到Tomcat容器下的solr项目中的WEB-INF/lib目录下;
5、为solr服务准备家目录,找打solr解压后的目录,将solr-4.10.3example目录下的有一个名称为solr的目录直接拷贝到硬盘根目录下,并且命名为solrHome(一般推荐这样做);
6、开始配置solr服务,找到Tomcat容器中部署的solr项目中的WEB-INF/web.xml文件,进行配置,首先打开<env-entry>标签,并且将刚刚拷贝好的solr的家目录的路径配置进去。
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>G:solrHome</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
7、启动Tomcat容器,并通过http://127.0.0.1:8080/solr地址访问即可,如果看到以下界面则配置成功。
8、 solr服务配置成功之后,就会默认有一个collection1的实例,如果需要的话也可以配置多个,将solrHome目录下的collection1目录拷贝多个并将每个目录下的core.properties配置文件中修改一下即可,记得重启Tomcat容器。
通过SolrJ操作并访问solr服务中的数据:
什么是solrj?
solrj是访问solr服务的Java客户端,提供索引和搜索的请求方法。
创建工程,并引入solrj所需的jar包:
需求一:向solr服务中的collection1实例中添加数据?
1 //向solr服务器中的collection1实例中添加数据
2 @Test
3 public void add() throws Exception{
4 //1、创建与solr服务器的连接
5 /*
6 * http://localhost:8080/solr默认连接的是collection1实例
7 * 如果想连接其他的实例,如collection2、collection3则在连接时必须指定:http://localhost:8080/solr/实例名称
8 */
9 SolrServer server = new HttpSolrServer("http://localhost:8080/solr");
10
11 //2、创建solr的文档对象并添加数据
12 SolrInputDocument document = new SolrInputDocument();
13 document.addField("id", "003");
14 document.addField("title", "solr");
15
16 //3、将文档对象添加到solr服务器
17 server.add(document);
18
19 //4、提交
20 server.commit();
21 }
需求二:修改solr服务中collection3实例中的数据?
1 //修改solr服务器上collection3实例中的数据
2 @Test
3 public void update() throws Exception{
4 //1、连接solr服务器上collection3实例中的数据
5 SolrServer server = new HttpSolrServer("http://localhost:8080/solr/collection3");
6 //2、创建solr的文档对象并将数据修改
7 SolrInputDocument document = new SolrInputDocument();
8 document.addField("id", "001");
9 document.addField("title", "博学谷");
10 //3、将文档对象添加到solr服务器
11 server.add(document);
12 //4、提交
13 server.commit();
14 }
需求三:对solr服务中的数据进行删除操作,根据id删除、删除所有数据?
1 //删除solr服务器上collection2实例中的指定数据:
2 @Test
3 public void delete() throws Exception{
4 //1、连接solr服务器
5 SolrServer server = new HttpSolrServer("http://localhost:8080/solr/collection2");
6 //2、根据id删除数据
7 server.deleteById("002");
8 //3、提交
9 server.commit();
10 }
11
12 //删除solr服务器上collection1实例中的所有数据:
13 @Test
14 public void deleteAll() throws Exception{
15 //1、连接solr服务器
16 SolrServer server = new HttpSolrServer("http://localhost:8080/solr/collection1");
17 //2、删除指定实例下的所有数据
18 server.deleteByQuery("*:*");
19 //3、提交
20 server.commit();
21 }
需求四:检索solr服务中collection3实例中的全部数据?
1 //查询solr服务器上collection3实例中所有的数据:
2 @Test
3 public void findAll() throws Exception{
4 //1、连接solr服务器
5 SolrServer server = new HttpSolrServer("http://localhost:8080/solr/collection3");
6 //2、创建查询对象
7 SolrQuery query = new SolrQuery();
8 //3、给查询对象中设置查询条件
9 query.setQuery("*:*");
10 //4、查询并获取响应
11 QueryResponse response = server.query(query);
12 //5、从响应中获得结果集
13 SolrDocumentList results = response.getResults();
14 //6、处理结果集
15 //输出结果集的总查询条数
16 System.out.println(results.getNumFound());
17 for (SolrDocument solrDocument : results) {
18 System.out.println("id*************"+solrDocument.get("id"));
19 System.out.println("title**********"+solrDocument.get("title"));
20 System.out.println("===========================================");
21 }
22 }
- c++中stack、queue、vector的用法一、栈(stack)二、队列(queue)三、向量(vector)
- React技巧7(TodoList实现3组件之间传递数据之优化)
- React技巧6(TodoList实现2组件之间传递数据)
- POJ A Knight's Journey
- React技巧5(TodoList实现)
- 求一个数n次方后的末尾数(数论/快速幂)问题描述解题思路代码实现运行结果参考
- Catch That Cow
- React技巧4(如何处理List里面的Item)
- ZOJ 3620 Escape Time II
- React技巧3(如何优雅的渲染一个List)
- FZU 电动车通行证制度
- 贪心算法总结贪心算法基本思路算法实现实例分析参考
- React技巧2(避免无意义的父节点)
- Havel定理
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Windows安装pip方法
- 通过jvm字节码研究Synchronized
- 学synchronized锁升级过程,吊打面试官
- jvm启动加载类的全过程,全网最全一篇,告诉你什么是双亲委派机制
- sonar+Jenkins 构建代码质量自动化分析平台
- 几百行代码,实现了微信群聊,神奇!
- 深入解析==与equals()区别
- 工作中常用的十款idea插件
- Linux系统rsync数据同步服务介绍
- 清空表与删除表mysql
- Java虚拟机-JVM组成结构详解
- 解决Chunkize warning while installing gensim问题
- numpy的random模块
- MySQL如何快速生成千万数据量?
- Linux系统rsync实战操作