Was ist der Unterschied zwischen den verschiedenen Suchtypen?
- Mögen
- Voller Text
- Kombiniert
Mich interessiert besonders, wie sich das Suchverhalten und die Leistung für diese Einstellungen ändern.
quelle
Was ist der Unterschied zwischen den verschiedenen Suchtypen?
Mich interessiert besonders, wie sich das Suchverhalten und die Leistung für diese Einstellungen ändern.
Jeder beschwert sich immer über Magento-Suche, aber ich glaube, es kann sehr gut funktionieren, wenn Sie Zeit damit verbringen, es richtig zu planen und zu konfigurieren.
Keyword-basierte Suchmethode, die Ihre Suchanfrage in einzelne Wörter aufteilt. Siehe das Folgende aus Zeile 326 in der KlasseMage_CatalogSearch_Model_Resource_Fulltext::prepareResult()
$words = Mage::helper('core/string')->splitWords($queryText, true, $query->getMaxQueryWords());
foreach ($words as $word) {
$like[] = $helper->getCILike('s.data_index', $word, array('position' => 'any'));
}
if ($like) {
$likeCond = '(' . join(' OR ', $like) . ')';
}
Sie können sehen, dass jedes Wort in Ihrer Suchanfrage aufgeteilt und in LIKE-Anweisungen zusammengefügt wird. Am Ende erhalten Sie Folgendes:
WHERE `attribute` LIKE 'my' OR `attribute` LIKE 'search' OR `attribute` LIKE 'query'
Diese Methode eignet sich möglicherweise für bestimmte Ladeneinrichtungen, in denen die Produktnamen einfach sind und die Kunden nach sehr spezifischen Artikeln suchen. Meiner Erfahrung nach ist sie jedoch keine gute Wahl.
Relevanzbasierte Suche - Jede Suchanfrage wird nach einer Punktzahl bewertet, die auf MySQLs Abfrage MATCH ... AGAINST basiert . Sie können dies in Aktion in Mage_CatalogSearch_Model_Resource_Helper_Mysql4
Zeile 44 sehen:
public function chooseFulltext($table, $alias, $select)
{
$field = new Zend_Db_Expr('MATCH ('.$alias.'.data_index) AGAINST (:query IN BOOLEAN MODE)');
$select->columns(array('relevance' => $field));
return $field;
}
Die Datenbanktabelle, die Magento für die Volltextsuche verwendet, ist catalogsearch_fulltext
. Ein Beispielwert:
EmCO0014e|Emma Certified|Emma Certified Organic Herbal Tonic Mist TRIAL/TRAVEL|Australian|Certified Organic|Palm Oil Free|Nut Free|Vegan Suitable|
Diese Werte sind direkt mit den Attributen verknüpft, die Sie unter "Katalog> Attribute> Attribute verwalten" als "In der Schnellsuche verwenden" angegeben haben
Ziemlich selbsterklärend. Schauen Sie sich Zeile 354 von Mage_CatalogSearch_Model_Resource_Fulltext an :
if ($likeCond != '' && $searchType == Mage_CatalogSearch_Model_Fulltext::SEARCH_TYPE_COMBINE) {
$where .= ($where ? ' OR ' : '') . $likeCond;
} elseif ($likeCond != '' && $searchType == Mage_CatalogSearch_Model_Fulltext::SEARCH_TYPE_LIKE) {
$select->columns(array('relevance' => new Zend_Db_Expr(0)));
$where = $likeCond;
}
Sie können sehen, dass es nur die LIKE-Ergebnisse hinzufügt, nachdem die FULLTEXT-Ergebnisse zurückgekehrt sind.
Sie können die Punkte 5 und 6 mit der Combine-Methode umgehen - die LIKE-Ergebnisse sollten alle Wörter ausgleichen, die FULLTEXT ignoriert.
Bei der Suche nach "Gefällt mir" wird die übliche Übereinstimmung mit "Gefällt mir" durchgeführt, wobei eine Abfrage wie "% keyword%" verwendet wird. Ein Vorteil dieser Art der Suche besteht darin, dass sie mit Teilwörtern übereinstimmt. Es hat jedoch schwerwiegende Nachteile:
Die Volltextsuche funktioniert mit der MyISAM-Volltextsuche ( http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html ). Sie sollten darüber lesen, aber auf den Punkt gebracht:
Der Nachteil von Volltext ist, dass er keine Teilübereinstimmungen ausführen kann, dh bei einer Suche nach "pho" wird "phone" nicht gefunden.
Die "kombinierte" Suche verwendet eine "Like" -Bedingung, um die Ergebnisse abzugleichen, berücksichtigt jedoch auch die Volltextsuche, um sie zu sortieren. Dies bedeutet, dass Sie mehr Ergebnisse erhalten (wie bei der Suche auch bei Teil-Übereinstimmungen) und diese aufgrund der Volltextbewertung auch besser sortiert werden.
Wie bereits erwähnt, sollten Sie Solr verwenden, wenn Sie die Suche ernst nehmen. Es ist viel schneller und viel relevanter. Sie müssten jedoch Magento EE besitzen und Solr selbst installieren.
Es handelt sich um direkte Verweise auf den Abfragetyp, den Magento verwenden wird. Persönlich denke ich, dass die Volltextsuche leistungsfähiger und die Leistung besser ist, insbesondere wenn LIKE mit Platzhaltern (%) verwendet wird. Eine Kombination von beidem ist wahrscheinlich am genauesten, könnte aber übertrieben sein. Ich würde mich an den Volltext halten.
Wenn Sie jedoch nach einer leistungsstarken Suchlösung suchen, schauen Sie sich dieses Projekt an: https://code.google.com/p/magento-solr/ . SOLR wurde für das Durchsuchen großer Sammlungen entwickelt. Die Implementierung kann zwar einige Zeit in Anspruch nehmen, sollte sich jedoch lohnen. Persönlich habe ich es noch nie in Magento benutzt, aber in anderen PHP-Projekten lief es sehr gut.
Die Volltextdokumentation finden Sie hier: http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html LIKE-Dokumentation hier: http://dev.mysql.com/doc/refman/5.0 /en/string-comparison-functions.html
quelle
OR
aufAND
?Das Problem mit LIKE ist, dass standardmäßig "% term%" verwendet wird. Ich habe es so geändert, dass es mit "term%" übereinstimmt (beachten Sie das Leerzeichen vor dem Begriff), sodass es mit den Wortanfängen übereinstimmt. Ich habe auch die letzten "s" in einem Suchbegriff abgeschnitten, damit "Autos" die gleichen Ergebnisse wie "Auto" liefert. Offensichtlich hilft das nicht bei unregelmäßigen Substantiven wie "Kinder", aber es ist trotzdem eine enorme Verbesserung.
Die größte, aus unerklärlichen Gründen unsinnige Maßnahme von Magento ist die Verwendung der "ODER" -Suche anstelle von "UND". Wenn Sie nach "roten Autos" suchen, erhalten Sie alles Rote (einschließlich Autos, Hunde, Gabeln, Berghänge usw.) und jede Art von Auto (einschließlich Rot, Blau, Grün, Gelb usw.). Mit „AND“, erhalten Sie nur Elemente , die „rot“ und „Auto“ enthalten, das ist , wie Suche sollte funktionieren!
Wenn Sie aus der Antwort von jharrison.au zitieren, ändern Sie Folgendes:
Dazu:
Um die Relevanz Ihrer Suchergebnisse sofort und massiv zu steigern.
Für den Plural können Sie das letzte "s" eines Wortes wie dieses abhacken:
In können
app/code/local/Mage/Core/Model/Resource/Helper/Abstract.php
Sie die Kerndatei überschreiben und diepublic function escapeLikeValue($value, $options = array())
als Schnellverknüpfung ändern , obwohl der empfohlene Weg ist, dasselbe in einem Modul zu tun. Aber hier ist es.Darunter
if (isset($options['position'])) {
befindet sich ein Schalter. Ich habe die Groß- und Kleinschreibung für 'start' und 'end' geändert, um vor und nach dem Wert Leerzeichen einzufügen:Damit die Leerzeichen davor / danach funktionieren, müssen Sie wahrscheinlich auch die Art und Weise ändern, in der der Suchindex erstellt wird, wie ich es getan habe, damit sichergestellt ist, dass vor und nach jedem Wort ein Leerzeichen steht. Die Standardmethode zum Erstellen des Index besteht darin, jedes Feld durch ein '|' zu trennen. (Pipe-Charakter), zB "blue | car | a very nice car" zur Indizierung von Farbe, Produkttyp, Produktbeschreibung. Aber mein Index hat "blue | car | a very nice car". Sie können den Aufbau des Suchindex sogar so ändern, dass möglicherweise mit Bindestrich versehene Wörter ersetzt werden ("superschnelles Auto" wird zu "superschnelles Auto") usw. usw.
Ausleihen eines Beispiels aus der Antwort von jharrison.au, wobei ein Standardsuchindexfeld wie folgt aussehen würde:
Meins würde so aussehen:
(Leerzeichen vor und nach jedem "|" und "/" und ein Leerzeichen vor dem allerersten Wort)
quelle
app/code/local/Mage/Core/Model/Resource/Helper/Abstract.php
. Diese Datei wird nur für die Suchfunktion verwendet.LIKE
in SQL-Suchanfragen gedacht. Wo sucht Magento anders als im Produktsuchindex? Ich habe diese Änderung vor über 2 Jahren in einer Produktionsstätte vorgenommen, und wir haben überhaupt keine diesbezüglichen Fehler gefunden. Alles, was es wirklich tut, ist, es so zu machen, dass ein "Wortanfang" ein Leerzeichen vor sich haben muss und ein "Wortende" ein Leerzeichen danach haben muss. Unabhängig davon stelle ich im Index sicher, dass jedes Wort mit Leerzeichen versehen ist.In keinem der oben genannten Fälle können Sie die integrierte Zend Lucene-Suchmaschine verwenden, indem Sie so etwas wie Blast Lucene Search oder Extendeware Lucene Search installieren. Die Relevanz übertrifft alle MySQL-Angebote.
Ja, ich habe alle Iterationen der akzeptierten Antwort durchgearbeitet, aber ehrlich gesagt fehlte die Suche nach Optimized Stock Magento immer noch sehr.
Lucene hingegen liefert und ist bereits in der Magento-Installation enthalten, es wird lediglich ein Modul benötigt, um es zu aktivieren.
quelle