首先,我在SO中發現了類似的問題,但他們沒有任何答案。所以,這個問題的第一部分有點重複。我想改善Magento中的搜索結果。下面是我做了什麼已經:如何以及在哪裏修改Magento搜索查詢?
搜索與AND
而不是當有多個單詞OR
。
2.阿賈克斯搜索開始從任何地方,不僅從田裏的開始搜索。
3.從單詞中修剪最後的s
以避免在用複數形式搜索時產生空的結果。
4.我改變了搜索類型從Like
到Fulltext
或Combine
,但效果並不好,甚至是最糟糕的,所以我把它原樣。現在是Like
,所以沒有relevance
排序。
,我想嘗試的最後一件事是adding this to the search query:
SELECT ... other non-full-text-cols
MATCH (product_title) AGAINST ('lean body for her') AS rel1,
MATCH (content) AGAINST ('lean body for her') AS rel2
FROM table
WHERE MATCH (product_title,content) AGAINST ('lean body for her')
ORDER BY (rel1*1.5)+(rel2)
這裏是我的查詢,但我不知道它是否會工作,因爲我無法測試它:
$this->_productCollection->addAttributeToSelect(
array(
'rel1' => new Zend_Db_Expr('MATCH (name) AGAINST ("'.$queryText.'")'),
'rel2' => new Zend_Db_Expr('MATCH (short_description) AGAINST ("'.$queryText.'")')
)
);
$this->_productCollection->getSelect()
->where('MATCH (name,short_description) AGAINST ("'.$queryText.'")')
->order('(rel1*1.5)+(rel2)');
主要想法是如果在產品的標題中找到搜索查詢,則爲結果添加獎勵權重。問題是我不知道在哪裏修改查詢。我找不到它在哪裏。 $this->_productCollection
不是正確的對象,我知道它。我查看了所有的Collection.php
文件,資源模型,模型,甚至查詢日誌,但沒有運氣。在某些文件中只有很少的1或2行部分,但沒有完整的查詢。我是Magento的新手,在找到這種類型的東西時仍然遇到問題。那麼,當我不得不擴展查詢時,我必須在哪裏放置我的附加內容?
Community Edition Magento,版本1.6.1.0。
注意:我知道一些用於改進搜索結果的擴展將比我的解決方案效果好得多,但現在我必須以這種方式來完成。對我來說這也是一個很好的經歷。
編輯:
所以,我想通了,如何添加我的自定義字段進行排序,但它
untruly我想。在class Mage_CatalogSearch_Model_Layer extends Mage_Catalog_Model_Layer
的prepareProductCollection
方法我添加了兩個加入到查詢並獲得領域rel1
和rel2
:
$collection->getSelect()->joinLeft(
array('cpev' => 'catalog_product_entity_varchar'),
'cpev.entity_id = e.entity_id AND cpev.attribute_id = 96',
array('rel1' => new Zend_Db_Expr('2.01*(LENGTH(cpev.value) - LENGTH(REPLACE(LCASE(cpev.value), LCASE("'.$queryText.'"), "")))/LENGTH("'.$queryText.'")'))
);
$collection->getSelect()->joinLeft(
array('cpet' => 'catalog_product_entity_text'),
'cpet.entity_id = e.entity_id AND cpet.attribute_id = 506',
array('rel2' => new Zend_Db_Expr('(LENGTH(cpet.value) - LENGTH(REPLACE(LCASE(cpet.value), LCASE("'.$queryText.'"), "")))/LENGTH("'.$queryText.'")'))
);
我的這些領域,但現在你可以看到我已經硬編碼的東西一樣attribute_id = 96
等,這是不很好,它不會每次都工作 - 我直接從數據庫表中檢查這些id。我是這樣寫的,因爲我沒有訪問name
和short_description
字段,但它們在結果中。不知道爲什麼。所以,cpev.value
是name
字段,而cpet.value
是short_description
字段。此外,我不能通過這些字段排序結果。我試過$collection->addOrder('SUM(rel1+rel2)');
,$collection->getSelect()->order(new Zend_Db_Expr('SUM(rel1+rel2)').' DESC');
,一些addAttributeToFilter
的東西等,但它不工作。
編輯2: 我接受@詹姆斯「的答案,但最後我們買了改善搜索結果的擴展。
使用Solr或ElasticSearch我相信這是解決您的問題的更好方法。它更適合覆蓋複數/單數搜索,同義詞,拼寫,相關性。 – FlorinelChis
謝謝,@FlorinelChis。我也檢查了不同的Magento擴展。但現在我想這樣做,因爲我不是很有經驗的添加第三方的東西,第二件事是我沒有太多的網上商店的權利。你能幫忙修改原始查詢嗎? – enenen