Joomla 3.x Релевантный поиск по zoo (jbzoo)

Тема в разделе "ZOO", создана пользователем isay777, 25.08.2015.

Метки:
  1. isay777
    Offline

    isay777 Недавно здесь

    Регистрация:
    10.01.2010
    Сообщения:
    17
    Симпатии:
    6
    Пол:
    Мужской
    Может кто-то видел, делал, знает как сделать поиск по jbzoo адекватным?

    Чтоб было релевантно
    Чтоб было с подсказками
    Чтоб был поиск по всем полям и всему тексту
    Чтоб был русский стеммер
    Чтоб был быстр
    Чтоб понимал djn nfrjt r ghbvthe - это

    ;)
     
  2.  
  3. CB9T
    Offline

    CB9T Преподаватель по J! Команда форума

    Регистрация:
    21.05.2010
    Сообщения:
    2 465
    Симпатии:
    305
    Пол:
    Мужской
    тему в раздел "юмор" ;)

    Ну я тестил с разными: http://salonsuzana.ru/allcoupons.html

    Через хаки...

    Код (CODE):
    1. if($search){
    2.  
    3. $searchData = explode(' ', $search);
    4. $searchWhere = array();
    5.  
    6. $from .=' LEFT JOIN '. ZOO_TABLE_SEARCH .' AS s ON a.id = s.item_id';
    7.  
    8. foreach($searchData as $searchWord){
    9.  
    10. $searchWord =JString::trim($searchWord);
    11.  
    12. $searchWhere[]= implode(' OR ', array(
    13. // 'LOWER(a.name) REGEXP ' . $this->db->Quote('^' . $this->db->escape($searchWord, true) . '', false),
    14. // 'LOWER(a.name) REGEXP ' . $this->db->Quote('' . $this->db->escape($searchWord, true) . '$', false),
    15. // 'LOWER(a.name) REGEXP ' . $this->db->Quote(' ' . $this->db->escape($searchWord, true) . '', false),
    16. // 'LOWER(a.name) REGEXP ' . $this->db->Quote('' . $this->db->escape($searchWord, true) . ' ', false),
    17. 'LOWER(a.name) REGEXP '. $this->db->Quote('[[:<:]]'. $this->db->escape($searchWord,true).'[[:>:]]',false)
    18.  
    19. ));
    20. }
    21.  
    22. $where[]='(('. implode(') AND (', $searchWhere).'))';
    23. }
     
    isay777 нравится это.
  4. isay777
    Offline

    isay777 Недавно здесь

    Регистрация:
    10.01.2010
    Сообщения:
    17
    Симпатии:
    6
    Пол:
    Мужской
    Спасибо пойду пробовать.
    А решение для релевантности или количеству вхождений видел?
     
  5. CB9T
    Offline

    CB9T Преподаватель по J! Команда форума

    Регистрация:
    21.05.2010
    Сообщения:
    2 465
    Симпатии:
    305
    Пол:
    Мужской
    По сути это построение запроса же:

    Код (CODE):
    1. $from .=' LEFT JOIN '. ZOO_TABLE_SEARCH .' AS s ON a.id = s.item_id';
    2.  
    3.  
    4. $searchWhere[]= implode(' OR ', array(
    5. // 'LOWER(a.name) REGEXP ' . $this->db->Quote('^' . $this->db->escape($searchWord, true) . '', false),
    6. // 'LOWER(a.name) REGEXP ' . $this->db->Quote('' . $this->db->escape($searchWord, true) . '$', false),
    7. // 'LOWER(a.name) REGEXP ' . $this->db->Quote(' ' . $this->db->escape($searchWord, true) . '', false),
    8. // 'LOWER(a.name) REGEXP ' . $this->db->Quote('' . $this->db->escape($searchWord, true) . ' ', false),
    9. 'LOWER(a.name) REGEXP '. $this->db->Quote('[[:<:]]'. $this->db->escape($searchWord,true).'[[:>:]]',false)
    10.  
    11. ));
    12. }
    13.  
    14. //AND и то и то
    15. $where[]='(('. implode(') AND (', $searchWhere).'))';
    16. }
     

Поделиться этой страницей

Загрузка...