这是我第一次尝试使用cfsearch。我有以下代码在我的dev服务器上使用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#">
答案 0 :(得分:0)
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支持the deltaimport
action,这可能比完全刷新更有效。