2012-04-30 56 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