2010-01-04 4 views
7

Я попытался использовать ColdFusion 9 для создания поисковой системы на моем сайте. Ключ Verity, который я прочитал, является лучшим инструментом для индексирования и поиска в моем содержимом базы данных.Как использовать Verity для индексирования и поиска содержимого базы данных в ColdFusion 9?

Но я искал вокруг, не повезло ни о каком учебнике, чтобы рассказать мне, как это сделать, даже урок отсутствует, или я думаю, что не нашел его.

Я использую ColdFusion 9 с сервером MySQL. Не могли бы вы посоветовать мне, как это сделать? или любой учебник, статья или электронная книга также приветствуются.

ответ

5

На самом деле у вас есть два отличных двигателя для CF9: Verity (классический) и Solr (современный).

Оба они реализуют идею коллекции. Создание и поддержка коллекции довольно очевидны и можно найти в руководстве (см. Предыдущие ссылки).

Основной совет для вас можно найти на странице справочной страницы cfindex: вы можете заполнить (обновить) коллекцию с помощью запроса данных. Установите тип custom, введите имя запроса и все необходимые столбцы (комбинации могут отличаться).

Все, что вам нужно, это использовать cfsearch.

Также я могу порекомендовать настроить сценарий, выполняемый планировщиком, для периодического обновления вашей коллекции.

EDIT

Пример кода (примечание: код не проверял, только упрощенный разрез от моего старого компонента). Это два метода ХФУ.

<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

Thank you !, Sergii! вы указали мне путь! но не могли бы вы рассказать мне больше о скрипте? Могу ли я сделать это на сервере Coldfusion? с CFM или CFC? Я нашел vSpider, но мне интересно, что это должен быть более простой способ сделать это. – Teerasej

+0

Вы можете управлять коллекциями, используя тег cfcollection. Вы можете обернуть cfindex и cfsearch в методы CFC (рекомендуется). Примеры использования каждого тега в ручном режиме, у вас есть ссылки. – Sergii

+0

См. Править. – Sergii

 Смежные вопросы

  • Нет связанных вопросов^_^