ch09搜索插件01:用户插件事件——Joomla插件开发

处理内容的大部分组件都需要提供搜索功能。搜索插件因此是Joomla中最通用的插件之一。本章包含如何写一个Search 插件和Smart Search 插件。也讲述了额外的搜索机制,比如Solor和Sphinx。简言之,包含所有需要知道的Joomla中的关于搜索的部分。

解释下一般搜索和Smart搜索

常规的搜索,是Joomla在Mombo时期就有的搜索功能。Smart 搜索是一个新的搜索机制,最早作为第三方扩展使用,叫做Finder。之后,在Joomla2.5发布时集成到内核里了。现在,叫做Smart搜索,但是在代码中还是用它的老名字finder
当你应用一个搜索到Joomla网站中的时候,你需要选择是常规搜索还是Smart搜索,这决定了是使用com_search还是com_finder。对于模块输出,或者用mod_search或者用mod_finder。一堆插件也是要么是search类型的,要么是finder类型的。
这两个搜索方式最主要的区别是:搜索结果是实时的还是预先建立的索引。本章将详细解释这两个机制的区别,以及如何为每个机制创建一个插件。

常规搜索如何工作

当游客使用常规搜索来查询一个关键词时,初始的搜索请求通过com_search组件(也可以通过菜单项)或者mod_search模块传递出来。com_search组件的控制器接收到请求,初始化视图类,然后通过搜索model来执行查询。为了获取查询结果,model初始化search插件组中的所有插件,然后触发OnContentSearch事件。每个插件可以使用这个事件,在特定的数据库表执行自己的查询,获得结果。通常,这些都是实时发生的。

每个搜素插件都是用来呈现能够用来搜素的特定类型的内容。比如Search - Content 插件用来搜索文章,Search - categories用来搜索目录(文章目录,而不是其他的目录),等等。Joomla核心带有每个内容类型的搜索插件。如果你使用一个第三方扩展,你应该找一个属于第三方扩展的搜索插件。

通过启用和禁用这些插件,搜索可以限定到特定的类型(比如,文章、链接,等)。也可以通过搜索参数来指定哪种类型的内容可以被搜索。这被称作search area。在搜索组件的表单中,可以通过选择搜索区域来缩小搜索结果。每个搜索插件可以通过OnContentSearchAreas来定义一到多个搜索区域,这个方法返回一个数组。

智能搜索如何工作

智能搜索,有称作finder,搜索过程非常不同。主要区别是,它使用一个独立的搜索索引,这个索引开始的时候通过一系列的操作创立。

和常规搜索一样,搜索请求先传到控制器,然后初始化视图,调用模型。但是模型并不直接调用插件去查询数据库。模型在一系列的数据库表(以*#__finder*开头)获取搜索结果。这些表以最优化的形式存储结果。

因此,首先要在这些表里填充上内容。在智能搜素的后台,使用Index按钮,为所有的内容建立索引。这个索引过程使用只能索引插件来从原始的数据库表中获取结果,将这些结果存储到finder数据库表中。这个过程中,每个插件的**index()**事件方法被调用。

这个机制的一个好处是,复杂的查询语句不用执行了。他们被快速的到已经优化过的数据库的查询。另外,索引表提供了一个统一的搜索接口,这样所有的内容类型都同样对待了。但是,也带来了一点挑战:每次一篇文章修改了,索引需要立即更新。为了不用一遍遍的重新更新索引,你可以使用Content - Smart Search插件,这个插件每次只更新修改了的索引。如果一篇文章更新了,这个插件确保到这片文章的索引的引用也一块更改了。所以,如果使用智能索引,做好全时启用这个插件。

创建一个常规搜索插件相对容易,创建一个finder很复杂。需要实现*index()*方法,还需要实现Content插件使用的各种各样的方法,以便索引能够实时更新。

哪个更好?

常规搜索使用原始的内容数据表,智能搜索使用索引表。如果你有5个内容类型,比如,文章、链接、联系人、目录和newsfeed。使用常规搜索要一个个的查询每个表,使用只能搜索,只需要查询一个表。所以说,智能搜索使用的表少所以查询少。但是,实际上不是这样的。智能搜索使用更多的数据库查询语句来获取结果。在一个带实例数据的Joomla网站上,智能搜索更慢。

小网站,如果只看性能,哪个都行。中等规模的网站,比如10000小文章,智能搜索更有效率。如果是大型网站,比如超过10000篇文章,文章规模还都挺大,哪个都不好用了。这时需要考虑外部搜素引擎的使用了。

智能搜索的另一个优势是,可以通过选择特定的搜索区域来细化搜索结果。但智能搜索不但可以指定搜索特定的内容,比如,文章还是链接,还能够指定只搜索特定目录的文章。

智能搜索还提供了内容映射的概念,所有的内容都放置到各种分支中(目录、作者、语言)。它允许你搜索有特定的关键词的文章,在特定的目录中,由指定的作者写的,用特定的语言。还能提供更多的过滤。

另一个很酷的特性是,智能搜索能够提供搜索建议。搜索一个关键词,比如examp,会没有结果,但是,他会给你个建议,搜索example

大部分网站没有在搜索页面上花费太多的精力。游客主要使用的搜索引擎是Google。这并不意味着不用设计搜索页面。如果不想投入太多时间再搜索上,使用简单的常规搜索,而不是智能搜索。

同时注意,虽然Content - Smart Search插件可以保持finder的索引实时更新,同样建议定期重建整个索引(Purge 然后Index)。

大部分情况,这两个搜索就够了。但是,大型网站,光建个索引就可能花费好几个小时或者几天。而且索引的数据表特别占用空间。这种情况下,最好将搜索任务转移给一个特定的搜索应用,比如,Solr或者Sphinx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值