確定爲那些希望改變,並使用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_attributes
與catalog_product_entity_varchar
並使用SELECT查找attribut_id
和value
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倍!索引完成後,搜索您網站搜索中的任何標籤:您添加標籤的那個項目應該顯示在靠近頂部的位置。請享用!
來源
2012-08-31 16:13:16
Zak