Trước hết, tôi đã tìm thấy các câu hỏi tương tự trong SO nhưng không có câu trả lời nào cho chúng. Vì vậy, phần đầu tiên của câu hỏi là một chút trùng lặp. Tôi muốn cải thiện kết quả tìm kiếm trong Magento. Dưới đây là những gì tôi đã thực hiện:Cách thức và nơi sửa đổi truy vấn tìm kiếm Magento?
1. Tìm kiếm với AND
thay vì OR
khi có nhiều từ.
2. Tìm kiếm Ajax bắt đầu tìm kiếm từ bất cứ đâu và không chỉ từ đầu các trường.
3. Cắt cuối cùng s
từ các từ để ngăn kết quả trống khi tìm kiếm bằng số nhiều.
4. Tôi đã thay đổi kiểu tìm kiếm Like
-Fulltext
hoặc Combine
nhưng kết quả không tốt hơn và thậm chí là tồi tệ nhất, vì vậy tôi rời khỏi nó như là. Bây giờ là Like
, do đó không có yêu cầu relevance
.
Điều cuối cùng mà tôi muốn thử là 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)
Đây là câu hỏi của tôi, nhưng tôi không chắc chắn nếu nó sẽ làm việc vì tôi không thể kiểm tra nó:
$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)');
Ý tưởng chính là thêm trọng số tiền thưởng vào kết quả nếu truy vấn tìm kiếm được tìm thấy trong tiêu đề của sản phẩm. Vấn đề là tôi không biết phải sửa đổi truy vấn ở đâu. Tôi không thể tìm thấy nó ở đâu cả. $this->_productCollection
không phải là đối tượng thích hợp, tôi biết điều đó. Tôi đã xem tất cả các tệp Collection.php
, mô hình tài nguyên, mô hình và thậm chí cả nhật ký truy vấn nhưng không có may mắn. Chỉ có một hoặc hai phần hàng trong một số tệp nhưng không phải là truy vấn đầy đủ. Tôi mới đến Magento và vẫn gặp vấn đề với việc tìm kiếm loại nội dung này. Vì vậy, nơi tôi phải đặt công cụ bổ sung của mình khi tôi phải mở rộng truy vấn?
Magento phiên bản cộng đồng, phiên bản 1.6.1.0.
Lưu ý: Tôi biết rằng một số tiện ích mở rộng để cải thiện kết quả tìm kiếm sẽ hoạt động tốt hơn nhiều so với giải pháp của tôi nhưng hiện tại tôi phải thực hiện theo cách đó. Nó cũng sẽ là một trải nghiệm tốt cho tôi.
Edit:
Vì vậy, tôi đã tìm ra cách để thêm các trường tùy chỉnh của tôi cho đặt hàng nhưng nó
untruly tôi nghĩ. Trong prepareProductCollection
phương pháp class Mage_CatalogSearch_Model_Layer extends Mage_Catalog_Model_Layer
's tôi bổ sung thêm hai tham gia vào truy vấn và nhận được các lĩnh vực rel1
và 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.'")'))
);
tôi có các lĩnh vực này bây giờ nhưng như bạn có thể thấy tôi đã cứng mã hoá thứ như attribute_id = 96
vv mà không phải là tốt ở tất cả và nó sẽ không hoạt động mọi lúc - tôi đã kiểm tra các id này trực tiếp từ các bảng cơ sở dữ liệu. Tôi đã viết nó như thế này bởi vì tôi đã không truy cập vào các lĩnh vực name
và short_description
nhưng họ đang ở trong kết quả. Không biết tại sao. Vì vậy, cpev.value
là trường name
và cpet.value
là trường short_description
. Hơn nữa tôi không thể ra lệnh cho kết quả của các trường này.Tôi đã thử $collection->addOrder('SUM(rel1+rel2)');
, $collection->getSelect()->order(new Zend_Db_Expr('SUM(rel1+rel2)').' DESC');
, một số addAttributeToFilter
nội dung vv nhưng không hoạt động.
Chỉnh sửa 2: tôi chấp nhận @ James 'câu trả lời nhưng cuối cùng chúng tôi đã mua một phần mở rộng để cải thiện kết quả tìm kiếm.
Sử dụng Solr hoặc ElasticSearch Tôi tin rằng đó là cách tiếp cận tốt hơn cho vấn đề của bạn. Đó là một phù hợp hơn để bao gồm tìm kiếm số nhiều/số ít, từ đồng nghĩa, chính tả, liên quan. – FlorinelChis
Xin cảm ơn, @FlorinelChis. Tôi đã kiểm tra các phần mở rộng Magento khác nhau. Nhưng bây giờ tôi muốn làm điều đó theo cách đó bởi vì tôi không có nhiều kinh nghiệm về việc bổ sung các công cụ của bên thứ 3 và điều thứ hai là tôi không có nhiều quyền trên cửa hàng web. Bạn có thể trợ giúp để sửa đổi truy vấn ban đầu không? – enenen