2012-04-30 35 views
0

我正在用php和mysql构建一个web应用程序。 Web应用程序将有3-4个大表格(每个表格有数百万条记录),因此它极其重要,因为它必须可以对其执行全文搜索,以搜索文本字段中的术语。我用mysql设计这个Web应用程序,因为它需要完整的酸支持和交易。现在我正在尝试了解如何以更快的方式通过术语(多个词)对3-4个大数据表中的搜索结果执行查询。方法集成solr和mysql

我考虑的Solr对于存储的旧数据,我认为我可以构建从MySQL数据导入到Solr的,但周期性cron作业,但我不明白:

  • 我如何可以查询新鲜结果与MySQL如果用户搜索刚插入几秒钟前的文本,而不是用户搜索旧文本插入例如2天前?

,如果用户修改旧数据:

  • 我怎样才能在salr即时更新的记录相符,才能从其他用户可见立即修改数据。

  • 如果用户正确地更新在MySQL(在一个事务),并立即下一个应用程序尝试更新一个旧的数据Solr中与新的数据值也刷新数据,但不能很好地工作,用户已经可以看到旧数据,而不是新数据,因为solr因为更新失败而已有旧数据。

回答

0

Solr有XML interface用于提交要建立索引的文档。每次更新应用程序中的可搜索数据时,都可以向solr提交添加/更新请求,然后“立即”索引该数据。

+0

好的,但如果我的应用程序在一个事务内部进行不同的更新并提交它,然后发送请求到solr获取更新索引,但solr更新请求失败,我获得了在mysql上它都可以,而不是在solr index isnt'updated 。用户然后搜索,他发现该记​​录没有更新,因为solr失败请求。所以我需要所有的更新执行由mysql和请求执行solr进入一个单一的事务,所以我失败的东西,我得到解散数据,如在mysql中的solr。可能吗? – paganotti

+0

如果我理解正确,那么您需要在MySQL和您的Solr实例之间保持100%的一致性。 Solr有一个java客户端,[SolrJ](http://wiki.apache.org/solr/Solrj);你可以在单个事务中执行你的mysql提交和Solr更新,如果solr更新失败,则将提交回滚到MySQL。 – beerbajay

+0

好的,谢谢。是否有可能也使用PHP驱动程序的solr获得即使如此100%一致性之间的MySQL和solr?如果我有大数据,索尔更新索引需要更多时间?因为你说的是​​“即时”,所以看起来花时间为文件更改建立索引以及在那一刻做出更新的用户不能等待很长时间的请求。 – paganotti