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