2012-08-30 146 views
0

我有一個獨特的任務,我已經得到了,而且我正處在最後一步,但是這個子任務證明是非常困難的!所以你有背景:我們運行一個Magento網站,並使用定製的SOLR搜索頁面。我正在使用phpSolrClient來解析Solr XML並返回可用的結果,然後從中生成搜索結果頁面。Alter Magento索引全文搜索?

我得到的任務是在Magento的後端有一個「屬性」,讓我們稱之爲「search_tags」。我們的目標是能夠插入一個標籤,它的delimitered用逗號重量:

sight^2,hearing^1,smell^3

我想編輯Magento的全文重新索引掰開串代碼,並插入標記X時間到fulltext1_en字段。所以它會增加兩次「視力」,「聽」一次,「聞」三次。這可以讓我們說,當有人搜索榨汁機時,儘管「榨汁機」或「果汁」一詞沒有出現在fulltext1_en字符串中,但可以在頁面上放置一個攪拌機。我已經開發了用於拉取,分割和迭代的代碼...但是我現在處於停滯狀態,因爲我不知道在reindex過程中將哪些代碼編輯到fulltext1_en中。如果任何人有任何編輯Magento的Fulltext Reindex的經驗,您的意見將不勝感激!我查看了Indexer.php,但是該文件中的所有內容最多都是模棱兩可的,所以這沒有任何幫助!得愛Magento!

回答

0

確定爲那些希望改變,並使用SOLR給「加權標籤」,以在Magento自定義搜索,我一整晚都沒睡得到這個權利,但它的工作原理...

首先,在Magento的過濾器並將其應用於所有產品。我將它命名爲「search_tags」。

接下來,使用下面的公式在過濾器的測試項目:

dude^25,crazyman^25,wierdsearch^25 

每一個字,接着一克拉,然後你想給它的重量。 (這是多少次的話會被重複,然後添加到fulltext1_en。)

之後做到這一點,打開以下文件:

/app/code/core/Mage/CatalogSearch/Model/Mysql4/Fulltext.php 

我知道它說MySQL4,不注意,SOLR使用此索引。

關於500線,你會看到下面的塊:

if ($selects) { 
     $select = '('.join(')UNION(', $selects).')'; 
     $query = $this->_getWriteAdapter()->query($select); 
     while ($row = $query->fetch()) { 

略低於此塊插入如下: 注:請不要使用我在這裏列出的屬性ID,這是唯一我的設置。你將不得不搜索你的數據庫來找到這個ID。我使用JOIN加入eav_attributescatalog_product_entity_varchar並使用SELECT查找attribut_idvalue WHERE entity_id =(在此處插入您的產品ID)。這是一種痛苦,但這是唯一的方法。這將返回該產品的所有屬性。找一個具有我們之前輸入的標籤的ID,並獲取它的ID。將其插入下面的代碼中。

 $attr_val = $row['value']; // Set attr_val so that it can be manipulated in following IF 

     if ($row['attribute_id'] == 457) { // 457 is the ID of MY search_tags filter, yours WILL be different! It can be found by joining eav_attributes table and catalog_product_entity_varchar and searching for the attribute value and ID where entity_id is X 
      $input = $row['value'];    // Set $input to value of filter 
      $attr_val = "";       // Create Emtpy string 
      $pieces = explode(',', $input); // Explode filter by comma 

       foreach ($pieces as $val){ 
       $i=1; 
       $val = explode('^', $val); // Explode each "tag" by carat 
        while ($i <= $val[1]) {  // Loop while $i is less than or equal to the number on the right side of the carat 
        $i++; 
        $attr_val = $attr_val . " " . $val[0]; // Append $attr_val with the word to the right side of the carat 
        }     
       }      
     } 

    $result[$row['entity_id']][$row['attribute_id']] = $attr_val; // Modified from Original 

插入之後...然後註釋掉下面的塊。

$result[$row['entity_id']][$row['attribute_id']] = $row['value']; // ORIGINAL BLOCK -- UNCOMMENT -- DO NOT DELETE 

現在運行一個全文重新索引,和你的fulltext1_en應該表明您已經添加了「花花公子」,「crazyman」和「weirdsearch」所​​有的25倍!索引完成後,搜索您網站搜索中的任何標籤:您添加標籤的那個項目應該顯示在靠近頂部的位置。請享用!