我终于得到了Solr的帮助,在你们所有人的帮助下,谢谢! 我不得不说,我现在明白你为什么推荐它,它真的很强大。
现在,问题......
我已将所有“可搜索”信息编入索引Solr
,我的计划是查询Solr,然后获取查询结果的ID:s
(所有记录中的每个都有一个ID字段值),然后我将其用于query MySQL
并获取其余信息。
因此,首先查询Solr,下一个solr发回所有与查询匹配的广告的id:s,然后我使用ID:s查询MySQL以获取其余信息。
我的问题是,在使用MySql执行此部件时,是否应将所有收到的ID:s保存到array
,然后query mysql
以查找具有这些ID的所有记录:s?
我应该这样做吗? (可能包含一些代码错误):
for ($i=0; $i<$id_from_solr.length; $i++){
mysql_query("SELECT * FROM table_name WHERE ad_id=$id_from_solr[$i]");
}
以上似乎不就像一个好的解决方案,因为它每次重新循环时都会执行“新查询”!
你会怎么做?
后续问题: 与不使用sort函数相比,在MySQL查询中添加sort函数会减慢速度吗?例如:
ORDER BY insert_date ASC
最后一个Q: 无论如何都要缓存MySQL结果,所以在排序时,我不必进行新的查询吗?
非常感谢!
如果您需要更多输入,请告诉我,我会更新此问号!
答案 0 :(得分:3)
问题1 (检索ID然后查询数据库):为什么不从Solr查询中返回一些字段,这样您也不必总是打到数据库?
Q2 (性能和排序):好吧,排序代表了对数据执行的额外任务,因此必须为数据库添加一些工作:这当然可以最小化如果您的ORDER BY
列上有索引。
Q3 (捕获MySql查询):您可以打开MySql缓存(如果请求与之前的请求匹配,将返回结果的缓存副本,假设数据尚未更改)在临时),或使用数据库之外的缓存层,如EhCache:
答案 1 :(得分:1)
对于第一部分,这是我如何编写单个查询语句:
$instr=implode(", ",$id_from_solr);
$stmt = "SELECT * FROM table_name WHERE ad_id IN (".$instr.")";