Jak i gdzie zmodyfikować zapytanie wyszukiwania Magento?

Po pierwsze, znalazłem podobne pytania w SO, ale nie ma na nie odpowiedzi. Tak więc pierwsza część pytania jest nieco zduplikowana. Chcę poprawić wyniki wyszukiwania w Magento. Oto co już zrobiłem:

1 Wyszukaj za pomocąAND zamiastOR kiedy jest wiele słów.

2. Wyszukiwanie Ajax rozpoczyna wyszukiwanie w dowolnym miejscu i nie tylko od początku pól.

3. Przytnij ostatnis od słów, aby zapobiec pustym wynikom podczas wyszukiwania za pomocą liczby mnogiej.

4. Zmieniłem typ wyszukiwania zLike doFulltext lubCombine ale wyniki nie były lepsze, a nawet były najgorsze, więc pozostawiam to tak, jak jest. JegoLike teraz nie marelevance zamawianie.

Ostatnią rzeczą, którą chcę wypróbować, jestdodając to do zapytania wyszukiwania:

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)

Oto moje zapytanie, ale nie jestem pewien, czy zadziałałoby, ponieważ nie mogę go przetestować:

$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)');

Główną ideą jest dodanie dodatkowej wagi do wyniku, jeśli wyszukiwane hasło znajduje się w tytule produktu. Problem polega na tym, że nie wiem, gdzie zmodyfikować zapytanie. W ogóle nie mogę znaleźć, gdzie to jest.$this->_productCollection nie jest właściwym obiektem, wiem to. Spojrzałem na wszystkoCollection.php pliki, modele zasobów, modele, a nawet dziennik zapytań, ale nie ma szczęścia. W niektórych plikach jest tylko 1 lub 2 części wiersza, ale nie jest to pełne zapytanie. Jestem nowy w Magento i wciąż mam problemy ze znalezieniem tego typu rzeczy. Więc gdzie muszę umieścić dodatkowe rzeczy, gdy muszę rozszerzyć zapytanie?

Community Edition Magento, wersja 1.6.1.0.

Uwaga: Wiem, że niektóre rozszerzenia do ulepszenia wyników wyszukiwania będą działać lepiej niż moje rozwiązania, ale na razie muszę to zrobić w ten sposób. Dla mnie też byłoby to dobre doświadczenie.

Edytować:

Więc wymyśliłem, jak dodać moje niestandardowe pola do zamówienia, ale to
nieprawdopodobnie myślę. Wclass Mage_CatalogSearch_Model_Layer extends Mage_Catalog_Model_LayerjestprepareProductCollection metoda Dodałem dwa sprzężenia do zapytania i otrzymałem polarel1 irel2:

$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.'")'))
);

Mam teraz te pola, ale jak widać, mam takie zakodowane rzeczyattribute_id = 96 itd., co wcale nie jest dobre i nie będzie działać za każdym razem - sprawdziłem te identyfikatory bezpośrednio z tabel bazy danych. Napisałem to tak, ponieważ nie mam dostępuname ishort_description pola, ale są w rezultacie. Nie wiem dlaczego. Więc,cpev.value jestname pole icpet.value jestshort_description pole. Ponadto nie mogę zamówić wyników według tych pól. próbowałem$collection->addOrder('SUM(rel1+rel2)');, $collection->getSelect()->order(new Zend_Db_Expr('SUM(rel1+rel2)').' DESC');, trochęaddAttributeToFilter rzeczy itp., ale to nie działa.

Edytuj 2: zaakceptowałem@James„odpowiedź, ale w końcu kupiliśmy rozszerzenie do ulepszania wyników wyszukiwania.

questionAnswers(2)

yourAnswerToTheQuestion