1

我有一个客户的请求,他希望能够在搜索结果中优先考虑他们的产品 SKU。SKU 在定义的键 CF_TITLE 中。我对真实性不是很好,而且那里的文档也不是很好。我设法修改它只找到 CF_TITLE 但它影响了其余的结果。我也不确定当前的标准是否正确,因为它并没有真正遵循我找到的任何示例语法。

那么如何修改标准,以便我们可以在结果中优先考虑“CF_TITLE”的完全匹配而不影响其余结果?

这是他们当前的搜索标签:

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

2 回答 2

0

由于 Verity 主要根据标准出现的次数来确定相关性,因此“优先排序”结果的一种方法是在索引集合时人为地将 SKU 多次附加到“正文”。

您可以在原始 SQL 查询中执行此操作,也可以在将结果集传递给 Verity 之前使用 ColdFusion 对结果集进行处理以使用 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 开始并向上调整,直到看到您想要的结果。

于 2011-05-03T08:34:13.603 回答
0

SKU 是否具有可预测的格式?如果是这样,那么如果检测到 SKU,您也许可以更改传递给 verity 的标准的形式。例如,如果您的 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,verity 将仅搜索标题字段。否则它将对整个索引进行正常搜索。您可能需要根据事情需要匹配的严格程度来改变上述内容,但您明白了。

于 2011-05-08T18:49:32.450 回答