Zuerst fand ich ähnliche Fragen in SO, aber es gibt keine Antwort für sie. Der erste Teil der Frage ist also ein wenig dupliziert. Ich möchte die Suchergebnisse in Magento verbessern. Hier ist, was ich bereits getan:Wie und wo kann ich die Magento Suchanfrage ändern?
1. Suche mit AND
statt OR
, wenn es mehrere Wörter.
2. Die Ajax-Suche beginnt mit der Suche von überall und nicht nur am Anfang der Felder.
3. Schneiden Sie die letzten s
aus den Wörtern, um leere Ergebnisse bei der Suche mit Plural zu verhindern.
4. änderte ich den Suchtyp Like
-Fulltext
oder Combine
aber die Ergebnisse waren nicht besser und noch schlimmer waren, also lasse ich es so ist. Es ist Like
jetzt, so gibt es keine relevance
Bestellung.
Das letzte, was, das ich versuchen will, ist 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)
Hier meine Frage ist, aber ich bin nicht sicher, ob es funktionieren würde, weil ich es nicht testen kann:
$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)');
Die Grundidee besteht darin, ein Bonusgewicht zu einem Ergebnis hinzuzufügen, wenn die Suchanfrage im Titel des Produkts gefunden wird. Das Problem ist, dass ich nicht weiß, wo die Abfrage geändert werden soll. Ich kann nicht finden, wo es ist. $this->_productCollection
ist nicht das richtige Objekt, ich weiß es. Ich schaute auf alle Collection.php
Dateien, Ressourcenmodelle, Modelle und sogar das Abfrageprotokoll, aber kein Glück. Es gibt nur ein oder zwei Zeilen in einigen Dateien, aber keine vollständige Abfrage. Ich bin neu bei Magento und habe immer noch Probleme damit, diese Art von Sachen zu finden. Also, wo muss ich meine zusätzlichen Sachen platzieren, wenn ich eine Anfrage erweitern muss?
Community Edition Magento, Version 1.6.1.0.
Hinweis: Ich weiß, dass einige Erweiterungen zur Verbesserung der Suchergebnisse viel besser funktionieren als meine Lösungen, aber jetzt muss ich es auf diese Weise machen. Es wäre auch eine gute Erfahrung für mich.
Edit:
Also, ich herausgefunden, wie meine benutzerdefinierten Felder für die Bestellung hinzufügen, aber es ist
untruly denke ich. In class Mage_CatalogSearch_Model_Layer extends Mage_Catalog_Model_Layer
‚s prepareProductCollection
Methode habe ich zwei auf die Abfrage verknüpft und erhalten die Felder rel1
und 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.'")'))
);
Ich habe diese Felder jetzt aber wie Sie habe ich harte Sachen wie attribute_id = 96
etc., die nicht codiert zu sehen ist gut und es wird nicht immer funktionieren - ich habe diese IDs direkt aus den Datenbanktabellen überprüft. Ich habe es so geschrieben, weil ich keinen Zugriff auf name
und short_description
Felder habe, aber sie sind im Ergebnis. Ich weiß nicht warum. So ist cpev.value
name
Feld und cpet.value
ist das short_description
Feld. Außerdem kann ich die Ergebnisse nicht nach diesen Feldern sortieren.Ich habe versucht, $collection->addOrder('SUM(rel1+rel2)');
, $collection->getSelect()->order(new Zend_Db_Expr('SUM(rel1+rel2)').' DESC');
, einige addAttributeToFilter
Sachen usw., aber es funktioniert nicht.
Edit 2: Ich akzeptierte @james "Antwort, aber schließlich kauften wir eine Erweiterung zur Verbesserung der Suchergebnisse.
Mit Solr oder ElasticSearch glaube ich, es ist ein besserer Ansatz für Ihr Problem. Es ist besser geeignet, plural/singuläre Suche, Synonyme, Rechtschreibung, Relevanz abzudecken. – FlorinelChis
Danke, @FlorinelChis. Ich habe auch verschiedene Magento Erweiterungen überprüft. Aber jetzt möchte ich es auf diese Weise tun, weil ich nicht sehr erfahren bin, dass ich Drittanbieter-Sachen hinzufüge, und die zweite Sache ist, dass ich nicht viel Rechte im Webshop habe. Könnten Sie bitte helfen, die ursprüngliche Abfrage zu ändern? – enenen