![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
rozwiązane
Witam Mam następujący problem: Integruję Magento z silnikiem Solr, muszę zastąpić domyślny mechanizm relevance na score Solarowy. Problem polega na tym, że jak już pozbyłem się zapytań kierowanych do bazy które operują na tabelach: catalogsearch_result catalogsearch_query catalogsearch_fulltext poprzez nadpisanie odpowiednich metod swoją implementacją to pojawił się problem sortowania danych. Kolekcję produktów mam nadpisaną również i działa to tak, że wyciągam z Solr'a tylko idki produktów, które spełniają kryteria wyszukiwania następnie ustawiam te idki:
następuje gdzieś dalej load() dane się pięknie wczytują, jednak przy domyślnym sortowaniu po relevance Magento się wysypuje (i nie dziwota): Cytat SELECT 1 AS `status`, `e`.`entity_id`, `e`.`type_id`, `e`.`attribute_set_id`, `e`.`name`, `e`.`price`, `e`.`small_image`, `e`.`tax_class_id`, `e`.`url_key`, `e`.`thumbnail`, `e`.`special_price`, `e`.`special_from_date`, `e`.`special_to_date`, `e`.`news_from_date`, `e`.`news_to_date`, `e`.`required_options`, `e`.`price_type`, `e`.`weight_type`, `e`.`price_view`, `e`.`shipment_type`, `e`.`image_label`, `e`.`small_image_label`, `e`.`thumbnail_label`, `e`.`frame_image`, `e`.`frame_image_label`, `e`.`bi_artstyle`, `e`.`bi_artstyle_value`, `e`.`bi_nationality`, `e`.`bi_nationality_value`, `e`.`bi_related_category`, `e`.`bi_products_count`, `e`.`bi_artists_multiverse`, `e`.`bi_artists_birth_date`, `e`.`bi_artists_death_date`, `e`.`bi_techniques`, `e`.`bi_chosen_product`, `e`.`bi_product_main_keyword`, `e`.`price`, `e`.`special_price`, `e`.`special_from_date`, `e`.`special_to_date`, `cat_index`.`position` AS `cat_index_position`, `e`.`display_price_group_0` AS `_rule_price` FROM `catalog_product_flat_1` AS `e` INNER JOIN `catalog_category_product_index` AS `cat_index` ON cat_index.product_id=e.entity_id AND cat_index.store_id='1' AND cat_index.visibility IN(3, 4) AND cat_index.category_id='3' ORDER BY `relevance` asc, `e`.`created_at` asc LIMIT 32 SQLSTATE[42S22]: Column not found: 1054 Unknown column 'relevance' in 'order clause' Chodzi o ten order by relevance na końcu zapytania. Problem polega na tym że po stronie użytkownika musi być dostępna opcja relevance w selektorze obok pozostałych created_at, name i price. Jeśli ją wywalę to zniknie z selektora, a ja potrzebuję tylko zastąpić ten domyślny relevance moim scorem z Solra. Opcja niestety musi być i celem moim jest takie nadpisanie tego zachowania, żeby de facto relevance z bazy nie był wyciągany w ogóle (taki myk). Druga koncepcja, która niestety nie sprawdziła się, gdyż po prostu nie działa (sic!) to dodanie do zapytania aliasu 2 as relevance, co w moim przypadku załatwiłoby sprawę, ale nie hula, czyli takie coś:
Tak na prawdę wyniki z Solra i tak są sortowane po pseudo-polu score, url mam taki: http://localhost:8983/solr/en?indent=on&am...+asc,score+desc i to działa, dane xmlowe ładnie prezentują się w kolejności takiej, jaka ma być. Ok. Pytanie: w jaki sposób mogę nadpisać to domyślne zachowanie Magentowego sortowania po relevance tak, aby we froncie nadal była dostępna opcja relevance, ale sam współczynnik relevance byłby wyciągany na podstawie mojego Solrowego score'a (albo w ogóle nie był wyciągany gdyż dane domyślnie już są posortowane) zamiast danych z bazy? Chodzi tylko o sortowanie wyników wyszukiwania tylko w tym konkretnym przypadku czyli po trafności, reszta działa bez zarzutu. Z góry dzięki za odpowiedzi. Mam nadzieję, że nie namieszałem zbyt mocno, starałem się opisać problem najdokładniej, jak umiem. Uff ![]() rozwiązanie dla zainteresowanych: Nadpisanie metod: setOrder w kolekcji setListOrders w bloku setQueryFilter w modelu (mysql4/query/collection) odpowiednia implementacja helpera widoku oraz zastąpienie sortowania kolekcji własną implementacją korzystającą z danych od Solra rozwiązują sprawę. Ten post edytował darko 29.04.2011, 13:34:25 -------------------- Nie pomagam na pw, tylko forum.
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 21.07.2025 - 14:08 |