2012-03-24 27 views
0

以一個電子商務商店爲例,其中包含不同網絡服務中的目錄和價格數據。現在,我們知道solr不允許部分更新文檔字段(JIRA bug),那麼如何爲這兩個服務編制索引? 我有三種可能性,但我不知道哪一個是正確的:solr如何處理數據拆分爲不同的服務,因此不能同步?

  1. 部分更新 - 不可能
  2. Solr的加入 - 有價格和產品目錄中單獨的索引,並加入他們的行列Solr中。你不能將它們加入你的客戶端代碼,而不會搞砸分頁和方面計數。我不知道這是否可能在pre-solr 4.0

  3. 有某種中間索引服務,根據這兩個服務的結果組成一個完整的文檔,並將其發送索引。但有兩個問題的方法:

    3.1,您仍然可以撰寫文檔部分,然後將文檔完成時,你可以設置一個標誌,表明這是一個完整的文件。但是,每次文檔必須被索引時,爲了做到這一點,必須首先檢查文檔是否存在於索引中,然後對其進行編輯並將其推回。所以,性能大打擊。 3.2您的中間服務會檢查某個特定的ID是否可用於所有服務 - 如果不是靜默地放棄該服務,並希望當它出現在其他服務中時,第一個服務已經被填充。這是可以的,但這意味着一個項目在搜索之前是不可用的,直到所有字段都可用爲止(並不總是令人滿意 - 如果您沒有價格,您可以簡單地將其設置爲缺貨並且仍然可用)

所有這些方法中,只有3.2#看起來可行,我 - 沒有人知道你是怎麼做到這種事情與DIH?因爲現在,你有兩個不同的入口點(2個不同的網絡服務)爲索引,每個人都有檢查其他

回答

0

通常的辦法來解決,這是接近你的3.2:創建要編制索引的文檔編寫代碼來自不同的可用服務。通常的流程是從目錄中獲取所有項目,然後在索引時獲取價格。您是否希望從沒有價格的目錄搜索商品取決於您的服務業務規則。如果您想加快流程(獲取產品,獲取價格,重複),請擴展API以獲取1000個產品,然後同時爲所有產品定價。

沒有理由爲什麼你應該從索引中刪除一個項目,如果它沒有價格,除非你不想要的物品沒有價格索引。這取決於您和您的特殊需要,在索引文檔之前需要提供哪些信息。

至於我記得大概4.0將支持部分更新,因爲它移動到新的抽象層的索引文件,雖然我不知道它會讓你的情況是靈活得多。

0

方法3.2是最常見的,但我認爲它略有不同。首先,考慮搜索結果中的內容,然後爲每個潛在結果創建一個Solr文檔,並提供儘可能多的信息。如果缺少價格是可以的,那麼以這種方式添加文檔。

您可能還需要匹配的Solr的文件,但是從Web服務獲取用於顯示的最新數據。這給了新的結果,並避免了對Solr和實時數據的批量更新之間的偏差。

不要屏住呼吸,要求將精細更新添加到Solr和Lucene中。由於沒有記錄級鎖定和更新,它的速度很快。

+0

一旦你添加了缺少的文件的文件,你如何更新它?是否每個不同的服務都會推送CHANGELIST ID,然後彙總各處的數據並推送到SOLR。或者你從solr中檢索文檔,更新它並將其推回。你可以從DIH做這種聚合,還是你必須編寫自己的代碼(我更喜歡它) - 我無法圍繞你的聚合器如何構建自己的頭......作爲一個cron,一個不同的webservice等 – Sandeep 2012-04-07 04:15:53

相關問題