2010-01-04 9 views
7

He intentado utilizar ColdFusion 9 para crear el motor de búsqueda en mi sitio. La clave es Verity que leí que es la mejor herramienta para hacer la indexación y la búsqueda en el contenido de mi base de datos.¿Cómo puedo usar Verity para indexar y buscar contenido de base de datos en ColdFusion 9?

Pero busco sin suerte sobre cualquier tutorial que me diga cómo hacerlo, incluso falta un tutorial, o creo que no lo encontré.

Estoy usando ColdFusion 9 con el servidor MySQL. ¿Podrías aconsejarme cómo hacer esto? o cualquier tutorial, artículo o e-book también es bienvenido.

Respuesta

5

En realidad, usted tiene dos grandes motores para CF9: Verity (clásico) y Solr (moderno).

Ambos implementan la idea de colecciones. La creación y el mantenimiento de la colección es bastante obvio y se puede encontrar en el manual (ver enlaces anteriores).

La pista principal para usted se puede encontrar en la página del manual de etiquetas cfindex: puede completar (actualizar) la colección con los datos de consulta. Establezca el tipo personalizado, ingrese el nombre de la consulta y todas las columnas que necesite (las combinaciones pueden variar).

Todo lo que necesita después de eso es usar cfsearch.

También puedo recomendarle que configure el script ejecutado por el planificador para actualizar su colección periódicamente.

EDITAR

Código de la muestra (nota: código no probado, sólo el corte simplificada de mi antiguo componente). Estos son dos métodos del CFC.

<cffunction name="index" access="public" returntype="any" output="true" hint="Rebuild search index"> 
    <cfargument name="collection" type="string" required="true" hint="Target collection name"> 
    <cfset var local = {} /> 
    <cftry> 


     <!--- pull the content ---> 
     <cfquery datasource="#variables.dsn#" name="local.getContent"> 
      SELECT C.id, C.title, C.content, P.name AS page 
      FROM #variables.tableContent# C 
      INNER JOIN #variables.tablePages# P 
       ON C.id_page = P.id 
     </cfquery> 


     <!--- update collection ---> 
     <cflock name="cfindex_lock" type="exclusive" timeout="30"> 

     <cfindex collection="#arguments.collection#" 
       action="refresh" 
       type="custom" 
       query="local.getContent" 
       key="id" 
       custom1="page" 
       title="title" 
       body="title,content" 
        > 

     </cflock> 

     <cfreturn true /> 

    <cfcatch type="any"> 
     <!--- custom error handler here ---> 
     <cfreturn false /> 
    </cfcatch> 
    </cftry> 
</cffunction> 



<cffunction name="search" access="public" returntype="any" output="true" hint="Perform search through the collection"> 
    <cfargument name="collection" type="string" required="true" hint="Target collection name"> 
    <cfargument name="type" type="string" required="true" hint="Search type"> 
    <cfargument name="criteria" type="string" required="true" hint="Search criteria"> 
    <cfargument name="startrow" type="numeric" required="false" default="1" hint="Select offset"> 
    <cfargument name="maxrows" type="numeric" required="false" default="50" hint="Select items count"> 
    <cfset var local = {} /> 
    <cftry> 

     <!--- pull the data from collection ---> 
     <cfsearch collection="#arguments.collection#" 
        name="local.searchResults" 
        type="#arguments.type#" 
        criteria="#LCase(arguments.criteria)#" 
        startrow="#arguments.startrow#" 
        maxrows="#arguments.maxrows#" 
         > 


     <cfset local.resultsArray = [] /> 

     <!--- convert data into the array ---> 
     <cfloop query="local.searchResults"> 
     <cfscript> 
      local.res = StructNew(); 
      local.res["id"] = local.searchResults.key; 
      local.res["summary"] = Left(local.searchResults.summary, 500) & "..."; 
      // highlight the search phrase 
      local.res["summary"] = ReplaceNoCase(local.res["summary"], arguments.criteria, "<strong>" & arguments.criteria & "</strong>", "ALL"); 
      local.res["page"] = local.searchResults.custom1; 
      local.res["title"] = local.searchResults.title; 
      ArrayAppend(local.resultsArray, local.res); 
     </cfscript> 
     </cfloop> 

     <cfreturn local.resultsArray /> 

    <cfcatch type="any"> 
     <!--- custom error handler here ---> 
     <cfreturn false /> 
    </cfcatch> 
    </cftry> 
</cffunction> 
+0

¡Gracias !, Sergii! ¡me apuntaste el camino! pero ¿podría orientarme más sobre el guión? ¿Puedo hacerlo en el servidor de Coldfusion? con CFM o CFC? Encontré vSpider, pero me gustaría que sea una forma más fácil de hacerlo. – Teerasej

+0

Puede gestionar colecciones utilizando la etiqueta cfcollection. Puede envolver el cfindex y cfsearch en los métodos de CFC (forma recomendada). Ejemplos de uso de cada etiqueta están en el manual, usted tiene los enlaces. – Sergii

+0

Por favor, mira editar. – Sergii

Cuestiones relacionadas