好的,这是我的搜索结果项目的一部分,在其中,我有从多个表返回的描述。所有这一部分都是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>
所以我的最终目标是包含关键字的描述。
例如。
我们说我正在搜索关键字'business'
我得到了正确的搜索结果,但是描述在所示描述中没有该词,因为我们通过trim_text函数将描述限制为25个单词。它使所有描述看起来大小相似。但无法证明关键字在描述中进一步下降的结果的有效性。
有任何问题吗?我希望我说得很清楚。
我正在使用Coldfusion 8 Standard。我正在我的开发服务器上测试它。
谢谢......
答案 0 :(得分:0)
听起来你需要在字符串中找到关键字的位置,然后取任意一边的字符。
将字符串视为列表,并使用空格字符和punction作为分隔符。
这样的事情:
<cfset wordFoundPos = listFindNoCase(string, searchTerm, " ,.-:;") />
假设返回42 - 也就是说,searchTerm是第42个单词。
将其转换为如此的字符位置:
<cfset charPos = findnocase(1, string, searchTerm) />
然后抓住那个角色两边的角色:
<cfset context = mid(190, charPos-90, string) />
您需要检测何时发现searchterm过于接近字符串的开头或结尾以避免错误,并确定何时将省略号附加和/或预先添加到上下文中。