Conectar motores de pesquisa

A nova pesquisa de informações federadas no sistema de Ajuda utiliza a noção de tipos de motores de pesquisa e de motores de pesquisa. Um tipo de motor é um meta-motor a partir do qual se pode criar vários motores de pesquisa concretos mediante parametrização.

Os novos tipos de motores são contributos de 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>
Este ponto de extensão é utilizado para constituir plug-ins dos participantes na pesquisa de informações. Cada motor de pesquisa pode ser configurado individualmente. Quando a pesquisa é iniciada, cada motor de pesquisa é executado como trabalho de segundo plano e os resultados são intercalados na vista de ajuda imediatamente abaixo da consulta.

Os motores de pesquisa definidos aqui não aparecem automaticamente como participantes na pesquisa federada enquanto não for estabelecida a associação dos produtos motores, a menos que o atributo productId fique indefinido. No caso dos motores que o definem, só aqueles associados a determinado produto aparecem quando esse produto estiver em execução.

Os motores de pesquisa podem simplesmente compor um URL e fornecer somente um acerto que contenha o URL como href. Os motores de pesquisa populares para os quais o suporte de API requer licença podem constituir plug-ins desta maneira. Do outro lado do espectro, os motores de pesquisa podem comunicar com o servidor e receber acertos individuais com informações como etiqueta, href, descrição breve, pontuação, etc. O motor de ajuda local pode produzir acertos desta maneira.

Seja qual for o mecanismo de pesquisa, os motores podem fornecer várias definições de âmbitos de pesquisa com as páginas de preferências JFace. Estas páginas são mostradas quando a ligação "Definições Avançadas" é seguida a partir da vista Ajuda. Além das páginas de preferências raiz definidas com o motor, sub-páginas de preferências adicionais podem constituir plug-ins para obter definições mais avançadas.

As definições de âmbito são carregadas e armazenadas mediante objectos IPreferenceStore. As definições de âmbito de todos os motores são agrupadas num conjunto de âmbito denominado. Quando se abrem pela primeira vez, é criado um conjunto de âmbito predefinido ("Predefinição"), mas os utilizadores podem definir mais conjuntos de âmbito e alternar entre eles.

Dado que o suporte de pesquisa federada faz parte do plug-in org.eclipse.help.base, é necessária uma fábrica para criar objectos de âmbito de pesquisa a partir dos dados no arquivo de preferências. Os clientes que constituem plug-ins de páginas de preferências de âmbito também devem constituir plug-ins de fábricas de âmbito.

Os motores definidos neste ponto de extensão não aparecem na UI por predefinição. O que é apresentado nela é uma instância concreta de um motor de pesquisa que pode ser modificada individualmente. Os produtos podem pré-configurar o sistema de ajuda com várias instâncias dos tipos de motores registados, possivelmente parametrizados para funcionarem da maneira pretendida. Além disso, os utilizadores podem adicionar instâncias próprias dos motores registados e configurá-los a seu gosto:

<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>