2015-07-20 17 views
0

我有一個Elasticsearch集羣有2個節點,PHP Elasticsearch API,Yii框架。通過地址數組和Elasticsearch緩存/ perfomrnace問題

我環路檢查:

如果繼續存在,否則插入新的地址。

問題:

  1. 插入第一個值
  2. 完成第一個地址的循環過程。
  3. 用第二個地址開始下一次運行。
  4. 驗證地址是否存在 - 此結果爲空地址(雖然我檢查並插入)
  5. 新地址將被插入,現在我有2個地址。

我的問題是:爲什麼查詢結果爲空雖然數據被插入(我懷疑這是由於延遲/緩存)?

------------ EDIT ----------------------- 代碼參考:

$resident = Resident::model(); 
     if ($address) { 
      $address->entity_id = $resident->id; 
      if (!$resident->mailingAddress) { 
       $address->default_mailing = 1; 
      } 
      if (!$address->save()) { 
       $messages[] = [ 
        'type' => 'warning', 
        'message' => 'failed', 
       ]; 
      } 
     } 

該代碼是一個更大的過程的一部分,但總結是如果($ address)在上一次運行中添加到Elastic時始終爲空。

+0

什麼? ...你能否包括有問題的代碼? – Epodax

+0

添加了代碼。我無法提供整個類(這是一個更大的過程的一部分,其中包括從文件,mysql插入和新用戶創建導入數據)。 –

回答

1

Elasticsearch定期發佈數據。發佈間隔可以配置爲index.refresh_interval設置(Check this entry of the documentation)。這是一個昂貴的操作,因此刷新間隔非常低並不總是一個好主意。

索引文檔時,您會收到一個響應json,告訴您操作是否成功。所以,在我看來,你可以依賴於它而不是在索引之後檢查文檔是否存在。

+0

你是對的 - 如果操作成功,我會得到迴應,問題是我必須檢查地址是否存在,因爲地址可能不會出現在第一個變量上。 因此,我必須檢查用戶是否已經在每次運行中都關聯了地址,這就是當我得到錯誤回覆時。 –