分享

solr 介绍:什么是solr,solr和solrCore

sstutu 2015-6-1 17:00:52 发表于 介绍解说 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 1 31416

问题导读

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.xml和schema.xml。solrconfig.xml从整体上对core进行了配置,例如索引的存放路径、字段的最大长度(maxFiedlLength)、写锁的超时时间(writeLockTimeout)、锁类型(lockType)、是否压缩索引(useCompoundFile)、内存索引缓冲区大小(ramBufferSizeMB)、合并因子(mergeFactor)、删除策略、自动提交策略、缓存设置等,它好比是一份组装机器人的说明书,里面详细描述了各个部件(handler)的参数。schema.xml主要是对索引的配置,例如分词器、字段名称+索引方法+存储方式+分词方式、唯一标识字段等,它好比是机器人学习的学习方法,机器人主动或被动接受特定数据,按照配置转化成索引,然后通过其部件(handler)展示出来,例如:search、moreLikeThis、spellCheck、factedSearcher等。
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的支持,本例的方法有效的解决了此问题。

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




欢迎加入about云群425860289432264021 ,云计算爱好者群,关注about云腾讯认证空间

已有(1)人评论

跳转到指定楼层
漂泊一剑客 发表于 2015-6-21 09:13:40
多谢楼下分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条