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

Discussion in 'ZOO' started by isay777, Aug 25, 2015.

  1. isay777
    Offline

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

    Joined:
    Jan 10, 2010
    Messages:
    18
    Likes Received:
    8
    Gender:
    Male
    Может кто-то видел, делал, знает как сделать поиск по jbzoo адекватным?

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

    ;)
     
  2.  
  3. CB9T
    Offline

    CB9T Преподаватель по J! Staff Member ⇒ Профи ⇐

    Joined:
    May 21, 2010
    Messages:
    2,604
    Likes Received:
    322
    Gender:
    Male
    тему в раздел "юмор" ;)

    Ну я тестил с разными: 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 likes this.
  4. isay777
    Offline

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

    Joined:
    Jan 10, 2010
    Messages:
    18
    Likes Received:
    8
    Gender:
    Male
    Спасибо пойду пробовать.
    А решение для релевантности или количеству вхождений видел?
     
  5. CB9T
    Offline

    CB9T Преподаватель по J! Staff Member ⇒ Профи ⇐

    Joined:
    May 21, 2010
    Messages:
    2,604
    Likes Received:
    322
    Gender:
    Male
    По сути это построение запроса же:

    Код (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. }
     

Share This Page

Loading...