Wie kann ich Verity verwenden, um Datenbankinhalte in ColdFusion 9 zu indexieren und zu durchsuchen?

StackOverflow https://stackoverflow.com/questions/1998468

Frage

Ich habe versucht, Coldfusion 9 zu verwenden, um Suchmaschinen auf meiner Website zu bauen. Der Schlüssel ist Verity, das ich gelesen habe. Es ist das beste Tool, um die Indexierung und Suche in meinem Datenbankinhalt durchzuführen.

Aber ich suche ohne Glück mit einem Tutorial, um mir zu sagen, wie ich das gemacht habe. Auch ein Tutorial fehlt, oder ich glaube, ich habe es nicht gefunden.

Ich verwende ColdFusion 9 mit MySQL Server. Könnten Sie mir raten, wie das geht? Oder ein Tutorial, ein Artikel oder ein E-Book ist ebenfalls willkommen.

War es hilfreich?

Lösung

Eigentlich haben Sie zwei großartige Motoren für CF9: Wahrheit (klassisch) und Solr (modern).

Beide implementieren die Idee von Sammlungen. Das Erstellen und Wenden der Sammlung ist ziemlich offensichtlich und kann in manuellem Handbuch gefunden werden (siehe frühere Links).

Der Haupthinweis für Sie finden Sie auf cfindex Tag Handbuch Anfrage Daten. Geben Sie den Typ ein Brauch, Geben Sie den Abfragennamen und alle Spalten ein, die Sie benötigen (Kombinationen können variieren).

Alles, was Sie danach brauchen, ist zu verwenden cfSearch.

Ich kann auch empfehlen, das von Scheduler ausgeführte Skript einzurichten, um Ihre Sammlung regelmäßig zu aktualisieren.

BEARBEITEN

Beispielcode (Hinweis: Code nicht getestet, nur der vereinfachte Schnitt meiner alten Komponente). Dies sind zwei Methoden des 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>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top