这是我第一次使用cfsearch。我有下面的代码工作在我的开发服务器与ColdFusion 10,和我之前创建的集合。
我能得到这个返回一致的结果的唯一方法是在cfindex和cfsearch之间放置一个"睡眠"。否则,90%的情况下搜索不返回任何结果,有时会返回部分或全部结果。我的查询只有3条记录,集合已经优化。
刷新集合非常重要,因为这是一个经常更改的企业目录。
<form action="search.cfm" method="get">
<input type="text" name="searchFor">
<input type="submit" value="Search">
</form>
<cfquery name="qryData" datasource="#session.DataSource#">
SELECT biz_id, biz_name, biz_city, biz_state, biz_county
FROM biz
WHERE user_level > 0 AND user_level < 99
</cfquery>
<cfindex collection="mySearch" action="refresh" body="biz_name,biz_city,biz_state,biz_county" key="biz_id" query="qryData">
<cfset sleep(100)>
<cfsearch name="search" collection="mySearch" criteria="#url.searchFor#" maxrows="100">
<cfdump var="#search#">
Solr服务器将需要一些时间来提交您对索引所做的更改。
一般来说,在同一个请求中做<cfindex>
和<cfsearch>
是一个非常糟糕的主意,如果你对每个正在进行的搜索请求都这样做,那就更糟糕了。
如果您需要频繁更新索引,创建一个计划任务,每隔一段时间运行一次,使索引保持最新:
<cfquery name="qryData" datasource="#session.DataSource#">
SELECT biz_id, biz_name, biz_city, biz_state, biz_county
FROM biz
WHERE user_level > 0 AND user_level < 99
</cfquery>
<cfindex
collection="mySearch"
action="refresh"
query="qryData"
key="biz_id"
body="biz_name,biz_city,biz_state,biz_county"
>
然后单独运行你的搜索。
<form action="search.cfm" method="get">
<input type="text" name="searchFor">
<input type="submit" value="Search">
</form>
<cfsearch name="search" collection="mySearch" criteria="#url.searchFor#" maxrows="100">
<cfdump var="#search#">
请注意,ColdFusion 10支持deltaimport
动作,这可能比做一个完整的刷新更有效。