插入搜索引擎

“帮助”系统中新的联合信息搜索功能使用了搜索引擎类型搜索引擎的概念。引擎类型是一个元引擎,通过参数化,可以根据该引擎创建许多具体的搜索引擎。

新引擎类型是通过 org.eclipse.help.ui.searchEngine 添加的:

<extension point="org.eclipse.help.ui.searchEngine">
	<engineType
		scopeFactory="com.example.xyz.XYZScopeFactory"
		label="XYZ Search"
		class="com.example.xyz.search.XYZSearch"
		icon="icons/etool16/xyzsearch.gif"
		pageClass="com.example.xyz.search.XYZSearchPage"
		id="com.example.xyz.XYZSearch">
		<description>
			Instances of XYZ Search search the XYZ site.
		</description>
	</engineType>
这个扩展点用来将搜索参与者插入到信息搜索功能中。每个搜索引擎都可以单独配置。当搜索系统启动时,每个搜索引擎都作为后台作业执行,并且立即在查询的“帮助”视图中对返回的结果进行整理。

除非保留 productId 属性未定义,否则,在建立引擎产品绑定前,此处定义的搜索引擎不会自动作为联合搜索参与者显示。对于定义了该属性的引擎来说,只有与特定产品绑定的那些搜索引擎才会在该产品运行时显示。

搜索引擎可以仅仅构造一个 URL 并且只提供一个包含该 URL 作为 href 的匹配项。可以按此方式插入那些需要向 API 支持提供其许可证的常用搜索引擎。另一方面,搜索引擎可以与服务器进行通信并接收各个包含诸如标签、href、简短描述和分数之类信息的匹配项。本地帮助引擎可以按此方式生成匹配项。

无论使用哪种搜索机制,引擎都可以使用 JFace 首选项页来提供各种搜索范围设置。当您从“帮助”视图中选择“高级设置”链接时,就会显示这些首选项页。除了引擎定义的根首选项页以外,可以插入其他首选项子页以提供更高级的设置。

范围设置是使用 IPreferenceStore 对象来装入和存储的。所有引擎的范围设置都分组到名为范围集的组中。在第一次打开时,将创建缺省范围集(“Default”),但用户可以定义多个范围集并在它们之间进行切换。

由于联合搜索支持是 org.eclipse.help.base 插件的组成部分,所以需要一个工厂来根据首选项库中的数据创建搜索范围对象。插入了范围首选项页的客户机还需要插入范围工厂。

缺省情况下,此扩展点中定义的引擎不会显示在 UI 中。UI 中显示的引擎是可以单独修改的具体搜索引擎实例。产品可以使用已注册的引擎类型的许多实例来对帮助系统进行预先配置,并可能对这些实例进行参数化以便按期望的方式执行它们。此外,用户可以添加他们自己的注册引擎实例并根据他们的要求配置它们:

<engine
	enabled="true"
	engineTypeId="com.example.xyz.search.XYZSearch"
	id="com.example.xyz.XYZSearch"
	label="XYZ Search">
</engine>
<engine
	enabled="true"
	engineTypeId="org.eclipse.help.ui.web"
	id="org.eclipse.sdk.Eclipse"
	label="%search.Eclipse.label">
	<description>
		%search.Eclipse.desc
	</description>
	<param
		name="url"
		value="http://eclipse.org/search/search.cgi?q={expression}&amp;ul=&amp;ps=20&amp;m=all">
	</param>
</engine>