0

好的,这是我的搜索结果项目的一部分,在其中,我有从多个表返回的描述。所有这部分工作 100%。

我目前使用一个 trim_text 函数,我传递一个字符串,以及我想保留多少个单词。

但是,现在我需要对其进行修改以确保关键字/搜索词在返回的描述中,以帮助在搜索结果中显示其有效性。

下面是现有的 trim_text 函数,我需要你的帮助来修改。

<cffunction name="trim_text" output="false" access="remote" returntype="string">
    <cfargument name="string" type="string" required="true">
    <cfargument name="word_limit" type="integer" required="false">

    <cfparam name="word_limit" default=20>
    <cfparam name="snippet" default="">
    <cfparam name="return_string" default="">
    <cfset return_string = "">

    <cfset return_string = reReplace( string, "</?\w+(\s*[\w:]+\s*=\s*(""[^""]*""|'[^']*'))*\s*/?>", " ", "all" ) />
    <cfset return_string = reReplace( trim( return_string ), "\s+", " ", "all" ) />

    <cfset snippet = reMatch( "([^\s]+\s?){1,#word_limit#}", return_string ) />

    <cfif !arrayLen( snippet )>
        <cfreturn "" />
    </cfif>

    <cfset charCount = listlen(snippet[1]) />
    <cfset wordCount = ( (word_limit * (arrayLen( snippet ) - 1)) + listLen( snippet[ arrayLen( snippet ) ], " " ) ) />

    <cfif charCount gt 190>
        <cfreturn left(snippet[1],190) & "..." />
    </cfif>

    <cfset return_string = snippet[1] & "..." />

    <cfreturn return_string />

</cffunction>

所以我的最终目标是包含关键字的描述。

举个例子。

假设我正在搜索关键字“业务”

我得到了正确的搜索结果,但是描述中没有显示的描述中的那个词,因为我们通过 trim_text 函数将描述限制为 25 个词。它使所有描述的大小看起来都相似。但无助于证明关键字在描述中更靠后的结果的有效性。

任何问题?我希望我说得很清楚。

我正在使用 Coldfusion 8 标准。我正在我的开发服务器上对此进行测试。

谢谢你...

4

1 回答 1

0

听起来您需要在字符串中找到关键字的位置,然后将字符放在两边。

将您的字符串视为列表,并使用空格字符和标点符号作为分隔符。

像这样的东西:

<cfset wordFoundPos = listFindNoCase(string, searchTerm, " ,.-:;") />

假设返回 42 - 也就是说,searchTerm 是第 42 个单词。

将其转换为字符位置,如下所示:

<cfset charPos = findnocase(1, string, searchTerm) />

然后抓住该字符两侧的字符:

<cfset context = mid(190, charPos-90, string) />

您需要检测何时发现搜索词太靠近字符串的开头或结尾以避免错误,并确定何时将省略号附加和/或预先添加到上下文中。

于 2011-03-09T00:51:42.380 回答