文档章节

Solr4.0的tomcat部署及Solrj的简单使用

gulf
 gulf
发布于 2016/09/30 10:52
字数 1707
阅读 8
收藏 0
点赞 0
评论 0

Solr简介

Solr是一个非常流行的,高性能的开源企业级搜索引擎平台,属于Apache Lucene项目。主要功能包括强大的全文检索、结果高亮、切面检索、动态聚类、数据库整合、富文本(例如Word,PDF)的处理,以及地理信息搜索。Solr是高度可扩展的,提供分布式检索和索引复制,并为世界上众多的大型网站提供搜索和导航功能。
Solr使用Java编写,可运行于servlet容器(如Tomcat)作为一个独立的全文搜索服务器。Solr以Lucene 为核心来创建索引和进行搜索,并提供类似REST的HTTP / XML和JSON API,这些API可以在任何编程语言中使用。通过Solr强大的扩展配置可适应几乎任何类型非Java编写应用程序,同时拥有丰富的插件来扩展高级功能。

Solr特性

  • 先进的全文检索功能
  • 专为高通量的网络流量进行的优化
  • 基于标准的开放接口 - XML,JSON和HTTP
  • 综合的HTML管理界面
  • 暴露JMX接口以方便监控服务器统计
  • 可扩展性 - 有效地复制到其他Solr搜索服务器
  • 使用XML配置达到灵活性和适配性
  • 可扩展的插件体系结构

Solr使用Lucene并进行了扩展

  • 一个真正的拥有动态域(Dynamic Field)和唯一键(Unique Key)的数据模式(Data Schema)
  • 对Lucene的查询语言进行了强大的扩展
  • 切面搜索和过滤
  • 地理空间信息搜索
  • 先进的,可配置的文本分析
  • 高度可配置、可扩展的缓存机制
  • 性能优化
  • 支持通过XML配置
  • 提供管理界面
  • 可监控日志记录
  • 支持高速增量式更新(Fast incremental Updates)和快照发布(Snapshot Distribution)
  • 高度可扩展的分布式搜索,片式指数在多台主机
  • JSON,XML,CSV /分隔的文本和二进制更新格式
  • 使用简单的方法即可从数据库、XML文件数据、本地磁盘、HTTP等来源获取数据
  • 基于Apache Tika对富文本进行解析和索引(PDF,WORD,HTML等)
  • Apache UIMA集成的可配置的元数据提取
  • 支持多个搜索索引

以上的介绍翻译自:http://lucene.apache.org/solr/。大概的翻译,如有错误欢迎指出。

Solr的运行

从Solr的官方网站上下载的Solr包里面有一个基于jetty的示例运行环境。下载Solr包,打开里面的example目录,点击里面的start.jar。在浏览器里面输入http://localhost:8983/solr,可以看到如下界面。

Solr4.0首页截图

以上是Solr管理控制台的主页,左边是导航。可以使用http://localhost:8983/solr/#/collection1/query进行查询结果的查看。这里提供的是一个方便示例界面。现在应该是没有数据的,因为没有向里面添加索引。可以使用solr提供的post.jar包进行简单的索引添加。这里不再介绍此方法,后面使用Solrj进行操作。具体的可以查看Solr目录下面的/docs/tutorial.html文档。

在Tomcat中部署Solr

上面的运行是Solr默认绑定的一个jetty,如果需要在tomcat中运行solr,方法如下:

1、将Solr/dist/apache-solr-4.0.0.war此war包复制到tomcat的webapps目录下面,并重命名成solr。

2、点击tomcat/bin/startup.bat运行tomcat,这时tomcat会解压solr.war包到webapps目录下面。看到控制台里面会有报错提示,是找不到solr的实例运行环境。这时关闭tomcat。

3、删除webapps目录下面的solr.war包。将下载的solr目录下面的example下面的solr目录复制到tomcat的webapps/solr下面。下面的目录结构大概是这样的webapps/solr/solr/collection1类似这样的。

4、打开webapps/solr/WEB-INF/web.xml文件,在里面添加如下内容。env-entry-value这个目录是指向上一个步骤中的目录。这里使用的是相对目录(相对于tomcat的bin目录),也可以使用绝对路径,如d:/solr等。步骤3中的目录不一定要位于tomcat中,只要此步骤中将路径配置正确即可。

<env-entry>
 <env-entry-name>solr/home</env-entry-name>
 <env-entry-value>../webapps/solr/solr</env-entry-value>
 <env-entry-type>java.lang.String</env-entry-type>
 </env-entry>

5、再次运行tomcat,输入http://localhost:8080/solr即可访问在tomcat中运行的solr环境。

使用Solrj操作Solr

从上面的步骤中可以看出Solr提供了一个企业搜索引擎平台的核心,可以通过他的接口进行索引的创建、修改、删除。并提交关键字进行搜索。但如果要真正的投入使用,还是有不和工作需要做,如:

1、对向Solr提交索引进行一定的封装以方便业务系统进行操作

2、对搜索进行封装,以方便结果的展现分析等等。

Solrj是使用java编写的一个操作Solr的工具,方便于进行索引的更新、搜索结果的获取等等。

在Solr的发布包里面有Solrj的相关jar包。Solrj需要的jar包为:

apache-solr-solrj-4.0.0.jar和他的依赖包solr/dist/solrj-lib

如果是使用maven,可以添加:

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

使用Solrj更新索引

使用Solrj是首先我们实例化一个SolrServer,这里使用HttpSolrServer。我们再创建一个SolrInputDocument以方便来添加要索引的数据。这里的Field是在\solr\solr\collection1\conf\schema.xml里面定义的,如果里面没有定义的字段在这里是不能添加的,除非是使用动态字段。示例代码如下:

String url = "http://localhost:8080/solr"; 
SolrServer server = new HttpSolrServer(url);
SolrInputDocument doc1 = new SolrInputDocument(); 
doc1.addField("id", "1");
doc1.addField("title", "云南xxx科技");
doc1.addField("cat", "企业信息门户,元数据,数字沙盘,知识管理");
SolrInputDocument doc2 = new SolrInputDocument(); 
doc2.addField("id", "2");
doc2.addField("title", "胡启稳");
doc2.addField("cat", "知识管理,企业信息门户,云南,昆明");
SolrInputDocument doc3 = new SolrInputDocument(); 
doc3.addField("id", "3");
doc3.addField("title", "liferay");
doc3.addField("test_s", "这个内容能添加进去么?这是动态字段呀");
List<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
docs.add(doc1);
docs.add(doc2);
docs.add(doc3);
server.add(docs);
server.commit();

到此就添加了三个document到solr的索引库里面。下面介绍如何进行搜索。

使用Solrj进行搜索

搜索的第一步和上面一样,先取得一个SolrServer。然后创建一个SolrQuery进行搜索,搜索取得的数据已经封装在QueryResponse里面,通过相关API获取结果数据。示例代码如下:

String url = "http://localhost:8080/solr"; 
SolrServer server = new HttpSolrServer(url); 
SolrQuery query = new SolrQuery("云南");
try {
 QueryResponse response = server.query(query);
 SolrDocumentList docs = response.getResults();
 System.out.println("文档个数:" + docs.getNumFound()); 
 System.out.println("查询时间:" + response.getQTime());
for (SolrDocument doc : docs) { 
 System.out.println("id: " + doc.getFieldValue("id")); 
 System.out.println("name: " + doc.getFieldValue("title")); 
 System.out.println(); 
 }

© 著作权归作者所有

共有 人打赏支持
gulf
粉丝 9
博文 253
码字总数 146849
作品 0
广州
程序员
Solr初探(6)——SolrCloud

Solr集群,即是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 。 当一个系统的索引数据量少的时候是不需要使用SolrCloud的,当索引量很大,搜索请求并发很高...

yuanlaijike ⋅ 04/12 ⋅ 0

Solr初探(5)——Solrj的基本使用

导入依赖 导入Solr源码包文件夹下的以及文件夹下的所有包到项目中。除此之外,还要加上包和测试包。 添加/更新数据 Solrj的使用十分简单,下面是一个添加数据的例子: (1)BaseURL就是Solr的...

yuanlaijike ⋅ 04/10 ⋅ 0

Spring Data Lovelace M2 发布,第二个里程碑版本

Spring Data 团队发布了 Lovelace 发行版的第二个里程碑版本。 此版本附带所有包含新功能,改进和错误修复。显着的变化包括: MongoDB 3.6支持更改流和客户端会话(准备MongoDB事务)。 针对...

周其 ⋅ 04/14 ⋅ 0

创建solr7.3.0集群_测试集群_添加中文分词器_导入数据

solr是apache下的一个用于做搜索引擎的高级项目,使用它可以满足绝大部分应用的搜索需求。 主机环境: Linux:centos6.5 JDK:1.8 solr:7.3.0 zookeeper:3.4.8 mmseg4j-solr:2.4.0 1. 创建与启...

特拉仔 ⋅ 04/25 ⋅ 0

Solrj操作Solr4.0 中CloudSolrServer的一般过程

Solrj操作Solr4.0 中CloudSolrServer的一般过程 一、准备工作:创建eclipse工程 1. 下载solr4.0_src的源码包,解压后,进入目录中, 在命令行执行:ant eclipse 则可以生成一个eclipse工程,...

小样 ⋅ 2013/02/26 ⋅ 0

Solr 4.0 基础教程

本文只是Solr 4.0的基础教程,本人不经常写东西,写的不好请见谅。 转载请标明原文地址:http://my.oschina.net/zhanyu/blog/86147 先说一点部署之后肯定会有人用solrj,solr 4.0好像添加了不...

尚小胖 ⋅ 2012/10/30 ⋅ 15

Solr Apache Solr 初级教程(介绍、安装部署、Java接口、中文分词)

Apache Solr 介绍 Solr 是什么? Solr 是一个开源的企业级搜索服务器,底层使用易于扩展和修改的Java 来实现。服务器通信使用标准的HTTP 和XML,所以如果使用Solr 了解Java 技术会有用却不是...

David_Tio ⋅ 2013/12/05 ⋅ 0

Solr环境搭建及IK分词的集成及solrJ的调用(一)

项目需要,最近在做使用solr进行搜索的项目。 solr是一个基于lucene的java开发的搜索服务器,简单点说solr是一个已经完成的war包,直接部署起来即可。 solr的安装比较简单,但是第一次使用,...

王小明123 ⋅ 2013/04/08 ⋅ 0

使用Solr进行检索

之前使用Solr进行简单的查询,没有进行系统的使用过,这次有机会从Solr的搭建(配置文件的书写)到检索的入口,下面简单介绍过程: 一,部署Solr: 1,解压solr-4.7.1.zip 2,把solr-4.7.1s...

Geek-S ⋅ 2014/05/06 ⋅ 0

SolrJ 方法及操作符

SolrJ 一. 什么是solrJ Solrj is a java client to access solr. It offers a java interface to add, update, and query the solr index; Solrj是Apache Solr提供的一个基于java端访问solr服......

一枚Sir ⋅ 2014/04/15 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

LVM

LVM: 硬盘划分分区成物理卷->物理卷组成卷组->卷组划分逻辑分区。 1.磁盘分区: fdisk /dev/sdb 划分几个主分区 输入t更改每个分区类型为8e(LVM) 使用partprobe生成分区的文件:如/dev/sd...

ZHENG-JY ⋅ 40分钟前 ⋅ 0

彻底删除Microsoft Office的方法

参照此链接彻底删除Office https://support.office.com/zh-cn/article/%e4%bb%8e-pc-%e5%8d%b8%e8%bd%bd-office-9dd49b83-264a-477a-8fcc-2fdf5dbf61d8?ui=zh-CN&rs=zh-CN&ad=CN......

Kampfer ⋅ 55分钟前 ⋅ 0

大盘与个股之间关系

大盘走多:积极出手 顺势加码 大盘走空: 少量出手 退场观望 大盘做头:逆势减码 少量操作 大盘做底 : 小量建仓 小量试单

guozenhua ⋅ 56分钟前 ⋅ 0

Day16 LVM(逻辑卷管理)与磁盘故障小案例

lvm详解 简述 LVM的产生是因为传统的分区一旦分区好后就无法在线扩充空间,也存在一些工具能实现在线扩充空间但是还是会面临数据损坏的风险;传统的分区当分区空间不足时,一般的解决办法是再...

杉下 ⋅ 今天 ⋅ 0

rsync实现多台linux服务器的文件同步

一、首先安装rsync,怎样安装都行,rpm,yum,还是你用源码安装都可以。因为我用的是阿里云的ESC,yum install rsync就ok了。 二、配置rsync服务 1.先建立个同步数据的帐号 123 groupadd r...

在下头真的很硬 ⋅ 今天 ⋅ 0

前端基础(三):函数

字数:1685 阅读时间:5分钟 函数定义 在最新的ES规范中,声明函数有4中方法: -函数声明 -函数表达式 -构造函数Function -生成器函数 1.函数声明 语法: function name([param[, param2 [....

老司机带你撸代码 ⋅ 今天 ⋅ 0

Java虚拟机的Heap监狱

在Java虚拟机中,我是一个位高权重的大管家,他们都很怕我,尤其是那些Java 对象,我把他们圈到一个叫做Heap的“监狱”里,严格管理,生杀大权尽在掌握。 中国人把Stack翻译成“栈”,把Hea...

java高级架构牛人 ⋅ 今天 ⋅ 0

Spring MVC基本概念

只写Controller

颖伙虫 ⋅ 今天 ⋅ 0

微软重金收购GitHub的背后逻辑原来是这样的

全球最大的开发者社区GitHub网站花落谁家的问题已经敲定,微软最终以75亿美元迎娶了这位在外界看来无比“神秘”的小家碧玉。尽管此事已过去一些时日,但整个开发者世界,包括全球各地的开源社...

linux-tao ⋅ 今天 ⋅ 0

磁盘管理—逻辑卷lvm

4.10-4.12 lvm 操作流程: 磁盘分区-->创建物理卷-->划分为卷组-->划分成逻辑卷-->格式化、挂载-->扩容。 磁盘分区 注: 创建分区时需要更改其文件类型为lvm(代码8e) 分区 3 已设置为 Linu...

弓正 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部