solr特点七:Plugins(扩展点)
http://wiki.apache.org/solr/SolrPlugins
在 Solr 1.3 中,扩展 Solr 以及配置和重新整理扩展变得十分简单。以前,您需要编写一个 SolrRequestHandler来实现新功能。这个方法的问题是其他 SolrRequestHandler很难重用该功能。例如,您可能有更好的分类方法,但却想保留现有的查询与突出显示功能。为了解决这个问题,Solr 项目提出了将各种 SolrRequestHandler(比如 StandardRequestHandler和 DismaxRequestHandler)重构为组件 —称为SearchComponent—的想法,这些组件可以链接起来,形成一个新的 SolrRequestHandler。现在,您只要关注 SearchComponent的新功能就可以了,不用再费神思考怎样才能最好地扩展、重用或复制其他功能。
不过请放心,现有的 SolrRequestHandler仍然可以像以前一样无缝地工作,但它们现在仅仅是负责实际工作的围绕 SearchComponent的包装器而已。表 1 介绍了一些新 SearchComponent的详细信息。稍后,我还将在本文中提供有关表 1 中的两个组件的更多信息(MoreLikeThisComponent和 SpellCheckComponent。参见 参考资料中的 SearchComponent链接)。
表 1. 常用的 SearchComponent
| 名称 | 说明和查询样例 |
|---|---|
QueryComponent |
负责将查询提交到 Lucene 并返回 Document的列表。
|
FacetComponent |
决定结果集的分类。
|
MoreLikeThisComponent |
为每个搜索结果查找与结果类似的文档,并返回这些结果。
http://localhost:8983/solr/select?&q=iPod&start=0&rows=10&mlt=true&mlt.fl=features&mlt.count=1 |
HighlightComponent |
在搜索结果的正文中突出显示查询词语的位置。
http://localhost:8983/solr/select?&q=iPod&start=0&rows=10&hl=true&hl.fl=name |
DebugComponent |
返回有关查询的解析方式的信息,以及每个文档的记录方式的详细信息。
http://localhost:8983/solr/select?&q=iPod&start=0&rows=10&debugQuery=true |
SpellCheckComponent |
根据索引的内容对输入查询进行拼写检查,并提供其他备选方法。
http://localhost:8983/solr/spellCheckCompRH?&q=iPood&start=0&rows=10&spellcheck=true&spellcheck.build=true |
默认情况下,所有 SolrRequestHandler都附带有 QueryComponent、FacetComponent、MoreLikeThisComponent、HighlightComponent和DebugComponent。要添加自己的组件,您需要:
- 扩展
SearchComponent类。 - 使 Solr 可以使用这些代码(参见 参考资料中链接到 Solr Plugins wiki 页面的链接)。
- 在 solrconfig.xml 中配置它。
例如,假定我创建了一个名为 com.grantingersoll.MyGreatComponent的 SearchComponent,并让 Solr 可以使用它,而现在我想要将其插入到 SolrRequestHandler中以查询它。那么我首先需要声明该组件,如清单 2 所示,这样 Solr 才能知道如何实例化这个类:
清单 2. 组件声明
<searchComponent name="myGreatComp" class="com.grantingersoll.MyGreatComponent"/>
接下来,我需要告知 Solr 要将其连接到哪个 SolrRequestHandler。在这个用例中,我可以使用三个选择之一:
- 显式地声明所有
SearchComponent,如清单 3 所示:清单 3. 显式地声明所有
SearchComponent<requestHandler name="/greatHandler" class="solr.SearchHandler">
<arr name="components">
<str>query</str>
<str>facet</str>
<str>myGreatComp</str>
<str>highlight</str>
<str>debug</str>
</arr>
</requestHandler> - 预先将组件添加到现有的链接上,如清单 4 所示:
清单 4. 预先将组件添加到现有的链接上
<requestHandler name="/greatHandler" class="solr.SearchHandler">
<arr name="first-components">
<str>myGreatComp</str>
</arr>
</requestHandler> - 将组件追加到现有链接上,如清单 5 所示:
清单 5. 将组件追加到现有链接上
<requestHandler name="/greatHandler" class="solr.SearchHandler">
<arr name="last-components">
<str>myGreatComp</str>
</arr>
</requestHandler>
关于 DebugComponent的说明
当您使用 first-components或 last-components方法时,DebugComponent必须是链接的最后组件。当组件改变 DebugComponent报告的值时(比如查询结果),这尤为有用。
现在,与 SearchComponent重构类似,也可以将查询解析和 SolrRequestHandler分开。因此,您可以把 DismaxQParser与任何 SolrRequestHandler一起使用。您可以通过输入defType参数来实现。例如:
http://localhost:8983/solr/select?&q=iPod&start=0&rows=10&defType=dismax&qf=name
使用 Dismax 查询解析器来解析查询,而不是标准 Lucene 查询解析器。
另外,您也可以通过扩展 QParser和 QParserPlugin来创建您自己的查询解析器,并让 Solr 可以使用它们,然后在 solrconfig.xml 中配置它。例如,如果我创建了 com.grantingersoll.MyGreatQParser和 com.grantingersoll.MyGreatQParserPlugin,并使让 Solr 可以使用它们,那么我应该在 solrconfig.xml 中按以下方式配置它们:
<queryParser name="greatParser" class="com.grantingersoll.MyGreatQParserPlugin"/>
随后,我可以将 defType=greatParser键 / 值对添加到一个查询请求中,以查询这个新的解析器。
Solr 最近版本还包含了很多其他的改进。如果您有兴趣学习更多内容的话,可以看一下 参考资料中的发布说明链接。从这里开始我们将学习 Solr 的新特性。
solr特点七:Plugins(扩展点)的更多相关文章
- Mac下搭建solr搜索引擎与PHP扩展开发(下)
[接上一篇]https://www.cnblogs.com/rxbook/p/10716759.html [下载php的solr扩展] 现在开始使用php和solr交互了,所以必需安装solr扩展,下 ...
- Spring Boot笔记七:扩展Spring MVC
新建一个类,继承WebMvcConfigurerAdapter package com.vae.springboot.config; import org.springframework.contex ...
- Mac下搭建solr搜索引擎与PHP扩展开发(上)
首先需要安装jdk,前往 https://www.oracle.com/technetwork/java/javase/downloads/jdk12-downloads-5295953.html 自 ...
- MVC教程七:扩展HtmlHelper方法
在上一篇文章的最后,列出了一些常见的HtmlHelper的方法,这些都是ASP.NET MVC已经定义好的,如果我们想自己定义一个HtmlHelper方法可以吗?答案是肯定的,那么如何自定义一个Htm ...
- Spring Boot(七)扩展分析
前面的章节在分析SpringBoot启动过程中,我们发现SpringBoot使用Spring框架提供的SpringFactoriesLoader这个类,实现检索META-INF/spring.fact ...
- Swift中文教程(七)--协议,扩展和泛型
Protocols and Extensions 协议(接口)和扩展 Swift使用关键字protocol声明一个协议(接口): 类(classes),枚举(enumerations)和结构(stru ...
- Swift从入门到精通第七篇 - 扩展 初识
扩展(学习笔记) 环境Xcode 11.0 beta4 swift 5.1 扩展 为类.结构体.枚举.协议添加新功能,同OC的分类很像,但扩展没有名字 扩展可以添加计算实例属性和计算类型属性(不能添加 ...
- Android Telephony分析(七) ---- 接口扩展(异步转同步)
本文是基于上一篇<Android Telephony分析(六) —- 接口扩展(实践篇)>来写的.上一篇介绍的接口扩展的方法需要实现两部分代码:1. 从APP至RIL,发送请求:2. 从R ...
- Identity用户管理入门七(扩展用户字段)
在实际使用时会发现很多字段在IdentityUser中并不存在,比如增加生日,地址等字段,可在模型类中实现自己的模型并继承自IdentityUser,需要修改的代码为以下类 一.新增模型 using ...
随机推荐
- 本地通过源码方式启动solr
首先,下载solr5.5.0源码,http://apache.fayea.com/lucene/solr/5.5.0/solr-5.5.0-src.tgz 解压完成后,分为几个目录,然而sol ...
- <转>cocos2d-x学习笔记(五)仿真树叶飘落效果的实现(精灵旋转、翻转、钟摆运动等综合运用)
转载自ufolr的博客 原文连接:http://blog.csdn.net/ufolr/article/details/7624851 最近项目中需要一个落叶的效果,本来想用粒子特效来实现,但是几经调 ...
- [nginx]lua操作redis
local redis = require "resty.redis" local red = redis:new() red:set_timeout() -- sec -- or ...
- 使用word设置标题级别, 自动生成和大纲对应的多级列表, 自动生成索引目录
作为程序员,只会开发是不够的, 在日常工作中还需要掌握一些办公软件的的操作方法,word excel ppt精通不敢, 暂且入个门吧, 在前后台开发配合过程中,能写的一手好文档将会达到事半功倍的效果, ...
- SQL Server修改表结构后批量更新所有视图
最近修改了数据库表结构,数据同步的时候出了问题,发现很多数据明明已经修改,但是通过视图筛选出来的还是原来的数据,所以怀疑应该是视图缓存了数据,在园子里找到下面的博文,在这里做个记录备忘. 原文链接:h ...
- 部分流媒体协议及流媒体开发框架vitamio
流媒体协议部分RTP.RTCP.RTSP.MMS.HLS.HTTP progressive streaming 流媒体协议:(RTP.RTCP.RTSP.MMS.HLS.HTTP progress ...
- python类静态变量
python的类静态变量直接定义在类中即可,不需要修饰符,如: 1 class Test: stc_attr = 1 def __init__(self,attr1,attr2): self.attr ...
- BDE 升级到FireDAC
BDE Query Replace Str in files by cnpack tools TQueryTFDQuery dmdb->qrypub->Open(sql); fdme ...
- 7.25 9figting!
TEXT 87 Fund management基金管理 A Miller's tale 米勒传奇(陈继龙编译) Dec 7th 2006 From The Economist print edit ...
- flask test
DATABASE_URI = 'mysql://root:mhc.123@127.0.0.1/test1'