ColdFusion 10 Solr cfsearch在cfdex之后只会偶尔返回结果



这是我第一次使用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动作,这可能比做一个完整的刷新更有效。

最新更新