4

我正在为我们的 CMS 构建一个搜索功能,本质上只是创建一个 cfquery,在我们的数据库中查找给定的文本。当我向浏览器显示结果时,我希望在结果中出现一段文本,其中包含搜索到的文本以及围绕它的一两个句子。所以这将是诸如 blah blah blah #FORM.searchedstring# blah blah blah 之类的东西。关于如何仅显示字符串的特定部分的任何想法?

谢谢

这是我写的

<cfquery datasource="#MyDatasource#" name="getstory">
SELECT *
FROM Stories
WHERE MYSTORIES.TEXT
LIKE '%#FORM.searchstring#%'
OR MYSTORIES.PAGETITLE
LIKE '%#FORM.searchstring#%'
OR MYSTORIES.HEADLINE
LIKE '%#FORM.searchstring#%'
OR MYSTORIES.SUBTITLE
LIKE '%#FORM.searchstring#%'
ORDER BY MNLSECTIONID
</cfquery>

正文中是一个返回所有条目的 cfloop 查询。我只想返回 MYSTORIES.TEXT 中的特定部分,中间有 #FORM.searchstring#。

4

2 回答 2

4

您可以使用一个FindNoCase()函数来查找您的文本中的位置#form.searchingstring#

就像是

<cfset locationoftext = findnocase(form.searchstring,getstory.story)>
<cfdump var="#Mid(getstory.story,locationoftext-40,40)#"><Br>
<cfdump var="#Mid(getstory.story,locationoftext,40)#">

不确定这是否正是您所追求的

于 2013-02-05T22:25:23.287 回答
1

另一种选择,可能会产生更准确的搜索结果,是使用 CFINDEX 将您的数据放入搜索集合(Verity 的 Solr 取决于您正在运行的 CF 版本),然后使用 CFSEARCH 搜索集合。您可以设置索引以返回数据中搜索词的实例,甚至可以轻松添加代码以突出显示所述实例。

http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7d04.html

http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7d02.htm

于 2013-02-06T18:20:53.073 回答