搜索是任何内容管理系统的核心功能,开发工作组一直在Github 仓库上努力使Joomla! 2.5的搜索功能更加强大。 Michael Babker负责组织这项工作,Chris Davenport协助他。到目前为止六个人为这个项目贡献了代码。Joomla! 1.5中Finder的原始代码是由Rob Schley、Louis Landry和Andrew Eddie编写的,并由JXtended分发。
我曾在几次Joomla!大会上听到Rob说Finder是他最喜欢的扩展,所以我问他为什么。
“Finder是我最喜欢的扩展,因为我喜欢有挑战性的问题。我认为大多数开发者都会承认,在Joomla站点内部构建一个索引搜索引擎是非常困难的。搜索引擎还涉及到很多非常有趣的话题和问题,比如自然语言处理、国际化、排序算法等。你对搜索引擎了解得越多,你就越谦虚。与主流搜索引擎相比,Finder只是一个玩具。然而,即使它是一个玩具,它也足够复杂,甚至能够挑战最有经验的Joomla开发者。”
Finder的不同之处
现有的Joomla!搜索使用简单的文本搜索来匹配字符串,并按找到的顺序引用结果。Finder用一种更像是著名搜索引擎的模型替换了这种搜索方式,在执行搜索之前,它会索引你的网站内容并将索引存储在你的数据库中(不是Big Table……还没有)。
我问Rob是什么使Finder变得如此快速。
“Finder比其他搜索选项更快,因为它创建了内容中文本的索引。在较高层面上,Finder确切知道你的网站内容中存在多少个任何给定单词的实例。这非常有用,因为它可以快速判断搜索术语是否相关以及它存在的地方。它还可以使用这些信息按相关性对结果进行排序,这一直是Joomla搜索的障碍。”
除了使搜索更快之外,索引还允许有用的功能,如建议和词干处理。词干处理意味着分解单词并执行类似词根的操作。例如,搜索“breaking”也可以给出包含“break”和“breaks”的结果。它还可以根据匹配的质量对结果进行排序,并降低常见单词的权重。
Finder集成项目
我向Michael询问了一些关于集成项目的问题。
问:你为什么参与Finder集成项目?
答:实际上,并不是因为我用Finder在我的网站上。我花了一些时间将代码从兼容Joomla! 1.5版本转换为当前版本,所以我提出帮助转换代码。由于JXtended的许多库被整合进了Joomla! 1.6,最大的问题是将代码转换并找到现在不必要的函数来删除。总的来说,我会说随着Joomla! 1.6/1.7的进步,整个代码库减少了数百行,使得管理比以前更容易。
问:到目前为止,这个项目中最有趣的部分是什么?
答:能够与几个其他开发者一起工作,帮助使所有东西像以前一样工作,同时尽可能简化。项目GitHub仓库中有六个不同的人进行了提交,所以这是一个协作和开放的过程。
问:对于扩展开发者来说,创建finder插件难度有多大?
答:就我个人而言,我希望第三方开发者创建插件尽可能简单。在转换过程中,旧的Finder插件都已转换为使用标准的Joomla!内容插件事件(如onContentChangeState),在实用的情况下,个别插件的代码已被清理和合并。在转换插件时,我发现开发中最困难的部分是从数据库中获取正确的数据。
问:你喜欢Finder的哪些方面?
答:它为Joomla!的核心添加了许多附加功能,是一个具有高级搜索功能且com_search所缺乏的搜索组件。作为集成的一部分,我一直在努力为Joomla!的核心添加一些附加功能,并使Finder的代码可供开发者重用。我正在进行的第一个项目是重写高亮函数,以便它们可以在所有代码中重用。我还引入了一个新的插件事件,onCategoryChangeState,它允许开发者在类别状态更改时处理项目。
参与进来
Michael已经设置了一个仓库,其中包含了已安装的CMS和Finder,你可以下载并安装它以帮助测试或编写代码。现在肯定还有一些问题,但最好是现在就找到更多问题而不是以后。使用GitHub上的跟踪器报告你发现的任何问题。
对于开发者来说,同样重要的是,就像在Joomla!的早期版本中一样,你需要制作插件来将你的扩展内容纳入Finder索引。该仓库包括了核心扩展的插件。如果你遵循那些模式,并且你的扩展是基于11.x框架构建的,那么为你自己的扩展构建一个插件应该是相当直接的。
关于Finder还有很多内容可以讨论,包括它是如何处理utf-8内容的(现在只能说,它做得很好)以及其他本地化问题,以及如何在网站上有效使用Finder。我将在未来详细介绍这些内容。