什么是solr,solr与solrCore

问题导读
1.什么是solr的core?
2. 如何在线给solr增加core?
3.什么是solr?

这里写图片描述

由于搜索引擎功能在门户社区中对提高用户体验有着 重在门户社区中涉及大量需要搜索引擎的功能需求,目前在实现搜索引擎的方案上有集中方案可供选择:
1). 基于Lucene自己进行封装实现站内搜索。工作量及扩展性都较大,不采用。
2). 调用Google、Baidu的API实现站内搜索。同第三方搜索引擎绑定太死,无法满足后期业务扩展需要,暂时不采用。
3). 基于Compass+Lucene实现站内搜索。适合于对数据库驱动的应用数据进行索引,尤其是替代传统的like ‘%expression%’来实现对varchar或clob等字段的索引,对于实现站内搜索是一种值得采纳的方案。但在分布式处理、接口封装上尚需要自己进行一定程度的封装,暂时不采用。
4). 基于Solr实现站内搜索。封装及扩展性较好,提供了较为完备的解决方案,因此在门户社区中采用此方案,后期加入Compass方案。

这里写图片描述

Solr简介
Solr是一个基于Lucene的Java搜索引擎服务器。
Solr 提供了层面搜索、命中醒目显示并且支持多种输出格式(包括 XML/XSLT 和 JSON 格式)。
它易于安装和配置,而且附带了一个基于 HTTP 的管理界面。
Solr已经在众多大型的网站中使用,较为成熟和稳定。
Solr 包装并扩展了 Lucene,所以Solr的基本上沿用了Lucene的相关术语。更重要的是,Solr 创建的索引与 Lucene 搜索引擎库完全兼容。通过对 Solr 进行适当的配置,某些情况下可能需要进行编码,Solr 可以阅读和使用构建到其他 Lucene 应用程序中的索引。此外,很多 Lucene 工具(如Nutch、 Luke)也可以使用 Solr 创建的索引。

这里写图片描述

Solr原理

Solr对外提供标准的http接口来实现对数据的索引的增加、删除、修改、查询。
在 Solr 中,用户通过向部署在servlet 容器中的 Solr Web 应用程序发送 HTTP 请求来启动索引和搜索。Solr 接受请求,确定要使用的适当SolrRequestHandler,然后处理请求。通过 HTTP 以同样的方式返回响应。默认配置返回 Solr 的标准 XML 响应,也可以配置 Solr 的备用响应格式。

可以向 Solr 索引 servlet 传递四个不同的索引请求:
add/update 允许向 Solr 添加文档或更新文档。直到提交后才能搜索到这些添加和更新。
commit 告诉 Solr,应该使上次提交以来所做的所有更改都可以搜索到。
optimize 重构 Lucene 的文件以改进搜索性能。索引完成后执行一下优化通常比较好。如果更新比较频繁,则应该在使用率较低的时候安排优化。一个索引无需优化也可以正常地运行。优化是一个耗时较多的过程。
delete 可以通过 id 或查询来指定。按 id 删除将删除具有指定 id 的文档;按查询删除将删除查询返回的所有文档。

这里写图片描述

solr在lucene外边做了一层厚厚的封装,主要是为了简化二次开发,提供了一些成熟的解决方案。

solr和solrCore
solr可以对多个core进行综合管理,并接受请求选择特定的一个或者多个core执行相关任务。
下面来回答什么是solr的core。
core从文件结构的角度来看的话,主要包括
一份索引(也可能还包括拼写检查的索引)、一堆配置文件。
最主要的配置文件是: solrconfig.xmlschema.xml
1) solrconfig.xml从整体上对core进行了配置,(其实这个文件不需要太大的变更)
例如 索引的存放路径字段的最大长度(maxFiedlLength)写锁的超时时间(writeLockTimeout)、锁类型(lockType)、是否压缩索引(useCompoundFile)、内存索引缓冲区大小(ramBufferSizeMB)、合并因子(mergeFactor)删除策略自动提交策略缓存设置等,
它好比是一份组装机器人的说明书,里面详细描述了各个部件(handler)的参数。

2) schema.xml主要是对索引的配置,
例如分词器字段名称+索引方法+存储方式+分词方式唯一标识字段等,
它好比是机器人学习的学习方法,机器人主动或被动接受特定数据,按照配置转化成索引,然后通过其部件(handler)展示出来,
例如:searchmoreLikeThisspellCheckfactedSearcher等。

core从功能方面来说的话,主要是通过各种handler进行工作

在线给solr增加core的方法

步骤:
1、下载tomcat、solr、并解压它们
2、将solr.war拷贝至tomcat/webapps下面
3、将solr/example下面的multicore拷贝至tomcat下面,并改名为solr
4、将solr/solr.xml中的<solr persistent="false">改为了<solr persistent="true">
5、cd tomcat;bin/startup.sh启动tomcat
6、首先要保证已经将solr/solr.xml中的<solr persistent="false">改为了<solr persistent="true">
7、在运行的时候将core1复制一份,改名为core2
8、之后发送请求

http://localhost:8080/solr/admin/cores?
action=CREATE&
name=core2&
instanceDir=/opt/tomcat/solr/core2&
config=solrconfig.xml&
schema=schema.xml&
dataDir=data

9、刷新http://localhost:8080/solr/即可看到新的core2已经识别出来了
10、可以指定dataDir的位置,以使索引创建在不同的目录,参数稍微修改一下即可:

http://localhost:8080/solr/admin/cores?
action=CREATE&name=core2&
instanceDir=/opt/tomcat/solr/core2&
config=solrconfig.xml&
schema=schema.xml&
dataDir=/opt/tomcat/data1

11、修改过dataDir的请求,生成的solr.xml文件中我们已经可以看到dataDir的位置:

<?xml version="1.0" encoding="UTF-8" ?>
<solr persistent="true">
  <cores adminPath="/admin/cores">
    <core name="core0" instanceDir="core0/"/>
    <core name="core1" instanceDir="core1/"/>
    <core name="core2" instanceDir="/opt/tomcat/solr/core2/" dataDir="/opt/tomcat/data1"/>
  </cores>
</solr>

12、操作成功返回的code应该是0:下面是操作成功之后页面显示的内容

<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">77</int>
</lst>
<str name="core">core2</str>
<str name="saved">/opt/tomcat/solr/solr.xml</str>
</response>

这个例子的作用在于:
当单个core的规模增长到一定程度之后,检索速度会相应变慢,如果我们创建一个新的core,将新来的数据写入新的core中,检索起来性能会有所提升。
ps:使用lucene的时候可以使用MultiSearcher对多快索引进行多线程搜索,性能有大幅提升,但是在solr环境下没有提供MultiSearcher的支持,本例的方法有效的解决了此问题。
本文参考了:http://wiki.apache.org/solr/CoreAdmin#CREATE

最后:感谢solr为我们提供了如此强大的支持。

文章来源:aboutyun:sstutu博主
推荐博文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值