Prima di tutto, ho trovato domande simili in SO ma non c'è alcuna risposta per loro. Quindi, la prima parte della domanda è un po 'duplicata. Voglio migliorare i risultati di ricerca in Magento. Ecco quello che ho fatto già:Come e dove modificare la query di ricerca Magento?
1. Cerca con AND
invece di OR
quando ci sono più parole.
2. La ricerca Ajax inizia a cercare da qualsiasi luogo e non solo dall'inizio dei campi.
3. Tagliare l'ultimo s
dalle parole per evitare risultati vuoti durante la ricerca con plurali.
4. ho cambiato il tipo di ricerca Like
-Fulltext
o Combine
ma i risultati non erano meglio e anche erano peggiori, quindi lo lascio così com'è. È Like
ora, quindi non c'è l'ordinazione relevance
.
L'ultima cosa che voglio provare è 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)
Ecco la mia domanda, ma non sono sicuro se avrebbe funzionato perché non posso provarlo:
$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)');
L'idea principale è quella di aggiungere un bonus weight a un risultato se la query di ricerca si trova nel titolo del prodotto. Il problema è che non so dove modificare la query. Non riesco a trovare dove sia. $this->_productCollection
non è l'oggetto giusto, lo so. Ho guardato tutti i file Collection.php
, i modelli di risorse, i modelli e anche il registro delle query ma senza fortuna. Ci sono solo 1 o 2 parti di riga in alcuni file ma non una query completa. Sono nuovo di Magento e ho ancora problemi con la ricerca di questo tipo di cose. Quindi, dove devo inserire le mie cose aggiuntive quando devo estendere una query?
Community Edition Magento, versione 1.6.1.0.
Nota: so che alcune estensioni per migliorare i risultati di ricerca funzioneranno molto meglio delle mie soluzioni ma per ora devo farlo in questo modo. Sarebbe anche una bella esperienza per me.
Edit:
Così, ho capito come aggiungere i miei campi personalizzati per l'ordinamento, ma è
untruly credo. Nel metodo class Mage_CatalogSearch_Model_Layer extends Mage_Catalog_Model_Layer
s' prepareProductCollection
ho aggiunto due si unisce alla query e ottenere i campi rel1
e 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.'")'))
);
ho questi campi ora, ma come si può vedere che ho codificato duro roba come attribute_id = 96
ecc che non è buono a tutti e non funzionerà ogni volta - ho controllato questi ID direttamente dalle tabelle del database. L'ho scritto così perché non ho accesso ai campi name
e short_description
ma sono nel risultato. Non so perché. Quindi, cpev.value
è il campo name
e cpet.value
è il campo short_description
. Inoltre non posso ordinare i risultati con questi campi.Ho provato $collection->addOrder('SUM(rel1+rel2)');
, $collection->getSelect()->order(new Zend_Db_Expr('SUM(rel1+rel2)').' DESC');
, alcune cose addAttributeToFilter
ecc. Ma non funziona.
Edit 2: ho accettato @james 'risposta, ma alla fine abbiamo comprato un'estensione per migliorare i risultati di ricerca.
Utilizzo di Solr o ElasticSearch Credo che sia un approccio migliore al problema. È una soluzione migliore per coprire la ricerca al plurale/singolare, i sinonimi, l'ortografia, la pertinenza. – FlorinelChis
Grazie, @FlorinelChis. Ho controllato anche diverse estensioni Magento. Ma per ora voglio farlo in questo modo perché non ho molta esperienza nell'aggiunta di materiale di terze parti e la seconda è che non ho molti diritti sul web shop. Potresti aiutare a modificare la query originale, per favore? – enenen