ColdFusion 10在cfindex返回结果后的Solr cfsearch有时候只有结果

时间:2013-05-20 20:56:33

标签: solr coldfusion cfsearch

这是我第一次尝试使用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#">

1 个答案:

答案 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,这可能比完全刷新更有效。