ColdFusion 10 Solr cfsearch после cfindex возвращает результаты только иногда

Это мой первый опыт использования 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#">

1 ответ

Серверу 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 действие, которое может быть более эффективным, чем полное обновление.

Другие вопросы по тегам