2010-01-04 13 views
7

Ho provato a utilizzare ColdFusion 9 per creare il motore di ricerca nel mio sito. La chiave è Verity che ho letto è lo strumento migliore per fare l'indicizzazione e la ricerca nel mio contenuto del database.Come posso utilizzare Verity per indicizzare e cercare contenuti di database in ColdFusion 9?

Ma io cerco in giro senza fortuna alcun tutorial per dirmi come fare, anche se manca un tutorial, o penso di non averlo trovato.

Sto utilizzando ColdFusion 9 con server MySQL. Potresti consigliarmi come fare questo? o qualsiasi tutorial, articolo o e-book è anche il benvenuto.

risposta

5

In realtà, hai due fantastici motori per CF9: Verity (classico) e Solr (moderno).

Entrambe implementano l'idea di collezioni. Creare e mantenere la collezione è piuttosto ovvio e può essere trovato nel manuale (vedi i link precedenti).

Il suggerimento principale per voi può essere trovato sulla pagina di manuale di tag cfindex: è possibile popolare (aggiornare) la raccolta con dati query. Impostare il tipo personalizzato, immettere il nome della query e tutte le colonne necessarie (le combinazioni possono variare).

Tutto ciò che serve dopo è quello di utilizzare cfsearch.

Inoltre, posso consigliare di impostare lo script eseguito dallo scheduler per aggiornare periodicamente la raccolta.

EDIT

codice di esempio (nota: il codice non testato, solo il taglio semplificata dal mio vecchio componente). Questi sono due metodi 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

Grazie !, Sergii! mi hai indicato la via! ma potresti guidarmi di più sulla sceneggiatura? Posso farlo nel server Coldfusion? con CFM o CFC? Ho trovato vSpider ma mi chiedo che dovrebbe essere più facile farlo. – Teerasej

+0

È possibile gestire le raccolte utilizzando il tag cfcollection. Puoi racchiudere cfindex e cfsearch nei metodi CFC (modo consigliato). Esempi di utilizzo di ciascun tag sono in manuale, hai i link. – Sergii

+0

Vedere la modifica. – Sergii

Problemi correlati