Tipos de motor de búsqueda federada

La nueva búsqueda de información federada en el sistema de ayuda utiliza la noción de tipos de motor de búsqueda y motores de búsqueda. Un tipo de motor es un metamotor a partir del cual pueden crearse varios motores de búsqueda concretos mediante parametrización.

Se contribuyen nuevos tipos de motor mediante 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 punto de extensión se utiliza para conectar participantes de la búsqueda en la búsqueda de información. Cada motor de búsqueda puede configurarse individualmente. Cuando se inicia la búsqueda, cada motor de búsqueda se ejecuta como trabajo de segundo plano y los resultados se clasifican en la vista de ayuda inmediatamente debajo de la consulta.

Los motores de búsqueda definidos aquí no se muestran automáticamente como participantes de búsqueda federada hasta que se establece el enlace de producto de motor, a menos que se deje sin definir el atributo productId. Para los motores que lo definen, sólo los definidos en un producto específico se mostrará cuando se ejecute ese producto.

Los motores de búsqueda pueden limitarse a componer un URL y proporcionar sólo una coincidencia que contenga ese URL como href. Así pueden conectarse los motores de búsqueda más populares para los que el soporte de API requiere licencia. En el otro extremo del espectro, los motores de búsqueda pueden comunicarse con el servidor y recibir coincidencias individuales con información tal como etiqueta, href, descripción breve, puntuación, etc. El motor de ayuda local puede producir coincidencias de esta manera.

Independientemente del mecanismo de búsqueda los motores pueden proporcionar diversos valores de ámbito de búsqueda utilizando páginas de preferencias de JFace. Estas páginas se muestran cuando el enlace 'Valores avanzados' va seguido de la vista de Ayuda. Además de las páginas de preferencia de raíz definidas con el motor, pueden conectarse subpáginas de preferencia adicionales para valores más avanzados.

Los valores de ámbito se cargan y se almacenan utilizando objetos IPreferenceStore. Los valores de ámbito para todos los motores se agrupan bajo un conjunto de ámbitos con nombre. Cuando se abre por primera vez, se crea el conjunto de ámbitos por omisión ('Default'), pero los usuarios pueden definir más conjuntos de ámbitos y conmutar entre ellos.

Dado que el soporte de búsqueda federada forma parte del conector org.eclipse.help.base, es necesaria una factoría para crear objetos de ámbito de búsqueda a partir de los datos del almacén de preferencias. Es necesario que los clientes que se conecten a páginas de preferencias de ámbito se conecten también a factorías de ámbito.

Los motores definidos en este punto de extensión no se muestran por omisión en la UI. Lo que se muestra es una instancia concreta de un motor de búsqueda que puede modificarse individualmente. Los productos pueden preconfigurar el sistema de ayuda con diversas instancias de los tipos de motor registrados, posiblemente parametrizadas para funcionar de la manera deseada. Además, los usuarios pueden añadir sus propias instancias de motores registrados y configurarlas a su gusto:

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