2017-08-15 55 views
0

我正在使用solr PHP客戶端的solr 6.6.0。我添加使用下面的代碼的文檔,並可以正常工作:Solr搜索引擎需要在添加文檔後重新啓動

foreach ($data as $key => $value) { 

       $docs['doc_no'.$i]['id'] = $value['id']; 
       $docs['doc_no'.$i]['name'] = $value['name']; 
       $docs['doc_no'.$i]['sub_title'] = strip_tags($value['sub_title']); 
       $docs['doc_no'.$i]['small_image'] = $value['small_image']; 
       $docs['doc_no'.$i]['project_type'] = $value['project_type']; 
       $docs['doc_no'.$i]['project_status'] = $value['project_status']; 
       $docs['doc_no'.$i]['logo'] = $value['logo']; 
       $docs['doc_no'.$i]['price'] = $value['price']; 
       $docs['doc_no'.$i]['url'] = $value['url']; 
       $docs['doc_no'.$i]['flat_type_desc'] = $value['flat_type_desc']; 
       $docs['doc_no'.$i]['project_config'] = $value['project_config']; 
       $docs['doc_no'.$i]['address'] = $value['address']; 
       $docs['doc_no'.$i]['location'] = $value['location']; 

       $i++; 
      } 
      //print_r($docs);exit; 

      $documents = array(); 
      foreach($docs as $item => $fields) { 
       $part = new Apache_Solr_Document(); 

       foreach ($fields as $key => $value) { 
        if (is_array($value)) { 
         foreach ($value as $data) { 
          $part->setMultiValue($key, $data); 
         } 
        } 
        else{ 
         $part->$key = $value; 
        } 
       } 

       $documents[] = $part; 
      } 

      try { 
        $solr->addDocuments($documents); 
        $solr->commit(); 
        $solr->optimize(); 


       } 
       catch (Exception $e) { 
        echo $e->getMessage(); 
       } 

執行上面的代碼我必須手動重新啓動通過CMD線Solr的經過,然後它得到體現,我想問的是,每次當我在solr中添加任何文檔時,我必須手動重新啓動solr?有沒有其他的方法可以在文檔中有數據時自動重新啓動solr。

任何幫助將不勝感激提前致謝。

回答

0

要使提交的文檔在索引中可見,您必須提交一個提交 - 並要求打開一個新的閱讀器(這通常是爲您處理的,所以這通常不是必需的。在Drupal框架中我不知道,但我猜你的Solr客戶端有一個commit方法或類似的東西。我嘗試搜索API文檔,但是除了_Document類之外,其它類型的文檔都是空的。 commit已發佈索引更改將在幾秒鐘內可見,或者在軟提交的情況下(其中更改不會在以後保留到磁盤)幾乎立即可見。提交文檔時,您也可以要求提供commitWithin間隔時間,但這也取決於您使用的客戶端如何包含該參數。

+0

感謝您的回答,但正如您在我的代碼中看到的,我已經寫了提交代碼'$ solr-> commit();' –

+0

啊,對不起。我不確定'$ solr'客戶端在發送'commit'時會做什麼 - 如果它沒有打開新的搜索器,您將看不到新的文檔。此外,通常不需要爲每次提交進行優化,除非您計劃讓生成的索引在較長時間內存活(即,如果經常提交新文檔,則在每次提交後進行優化都將毫無價值)。 – MatsLindh

+0

所以我應該從我的代碼中刪除優化行? –

相關問題