1

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

1 回答 1

0

Solr 服务器将需要一点时间来提交您对索引所做的更改。

一般来说,在同一个请求中执行 the<cfindex>和 the是一个非常糟糕的主意<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操作。

于 2013-07-04T15:11:18.750 回答