2011-05-02 45 views
1

我有一個客戶的請求,他希望能夠在搜索結果中優先考慮他們的產品SKU。 SKU在定義的鍵CF_TITLE中。我的表現不太好,文檔也不是很好。我設法修改它以僅查找CF_TITLE,但它影響了其餘的結果。我也不確定當前的標準是否正確,因爲它沒有真正遵循我發現的任何示例語法。在Verity結果集中優先考慮CF_TITLE

那麼如何修改標準,以便我們可以在結果中優先匹配「CF_TITLE」,而不會影響其他結果?

這是他們目前的搜索標籤:

<cfsearch 
collection="company" 
name="SearchResults" 
criteria="(<NOT> CF_KEY <MATCHES> #SearchKeywords#) 
AND (#SearchKeywords#)" 
status="Info"> 

回答

0

由於Verity的決定主要是基於的標準出現的次數相關,以「優先考慮」的結果的一種方式是將SKU多次人爲地附加到索引集合時的「正文」。

您可以在原始SQL查詢中執行此操作,也可以使用ColdFusion在將結果集傳遞給Verity之前使用SKU對結果集進行填充。下面是後一種選擇的例子:

<!--- Get the product data---> 
<cfquery name="qProducts" datasource="blog"> 
    SELECT 
     ID 
     ,SKU 
     ,title 
     ,description 
    FROM 
     products 
</cfquery> 

<!--- Massage the data to prioritise the SKU by creating a new query from the original ---> 
<cfset qProductsForIndex = QueryNew("ID,title,body","Integer,VarChar,VarChar")> 

<cfloop query="qProducts"> 
    <cfset QueryAddRow(qProductsForIndex)> 
    <cfset QuerySetCell(qProductsForIndex,"ID",qProducts.ID)> 
    <cfset QuerySetCell(qProductsForIndex,"title",qProducts.title)> 
    <!--- Add the SKU 5 times, separated by a semi-colon ---> 
    <cfset QuerySetCell(qProductsForIndex,"body",qProducts.description & ";" & RepeatString(qProducts.SKU & ";",5))> 
</cfloop> 

<!--- Pass the massaged query to Verity ---> 
<cfindex action="REFRESH" 
    collection="products" 
    type="CUSTOM" 
    query="qProductsForIndex" 
    key="ID" 
    title="title" 
    body="body"> 

注意分號分隔額外的SKU,這確保Verity的將匹配它們作爲獨立出現。

我已經使用了5作爲示例編號,但您可以從2開始並向上調整,直到看到所需的結果爲止。

+0

我會嘗試一下,但我希望在標準的解決方案,而不是操作索引。我已閱讀文檔[http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=Tags_r-s_13.html],但我很難找到我需要做的事情那裏。 – cjohansson 2011-05-06 08:40:10

0

SKU是否具有可預測的格式?如果是這樣,那麼如果檢測到SKU,則可以更改傳遞給驗證碼的標準格式。例如,如果你的SKU都開始用3個字母后跟3個數字:

<cfscript> 
    // forced example; replace this with actual keywords from the search form 
    searchKeyWords = "ABC123"; 
    // RegEx to detect SKUs according to their format 
    if(REFind("^\w{3,3}\d{3,3}$",searchKeyWords)) 
     request.criteria = "CF_TITLE <CONTAINS> #searchKeyWords#"; 
    else 
     request.criteria = searchKeyWords; 
</cfscript> 
<cfsearch 
    collection="company" 
    name="SearchResults" 
    criteria="#request.criteria#"> 

所以如果一個SKU檢測真理會僅搜索標題字段。否則,它會對整個索引進行正常搜索。您可能需要根據事情需要匹配的嚴格程度來變更上述內容,但您明白了。