ФорумПрограммированиеPHP для идиотов → поиск по сайту

поиск по сайту

  • Animator

    Сообщения: 194 Репутация: N Группа: Кто попало

    Spritz 20 марта 2008 г. 9:32

    день добрый господа форумчане! есть у меня к вам просьба, хочу сделать поиск по сайту, но незнаю даже принципов… весь контент у меня в мускуле и мне нужно чтоб происходил поиск в конкретных полях конкретных таблиц, ну и выводился результат. буду очень благодарен если подскажете какие статьи почитать или дадите ссылки на готовые, подходящие скрипты
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 20 марта 2008 г. 9:56, спустя 23 минуты 44 секунды

    обычный поиск совпадений — WHERE `field` LIKE '%поисковой запрос%' (это самое простое)

    полнотекстовый поиск — http://www.mysql.ru/docs/man/Fulltext_Search.html
    все умрут, а я изумруд
  • mechanic

    Сообщения: 125 Репутация: N Группа: Кто попало

    Spritz 20 марта 2008 г. 9:59, спустя 2 минуты 30 секунд

    ссылки на подходящие скрипты может дать гугль и яндекс

    а если самому начинать писать, то надо определиться с реализацией
    к примеру есть такой вариант результатов:

    найдено в разделе новости: 7
    - blablabla
    - blablabla
    ….
    найдено в разделе товары: 10
    - erfgh adfh
    - azfsdh fs


    т.е. отдельно ищешь в каждой таблице
    конфиг поисковика может быть такой:

    $tables = array(
    'news' => array('title', 'content'), //ищем в таблице новостей по полям Заголовок и содержание
    'goods' => array('title', 'description') //ищем в таблице товаров по полям Заголовок и описание
    );


    или чуть сложнее :)

    $tables = array(
    'news' => array(
    'fields' => ('title', 'content'), //ищем в таблице новостей по полям Заголовок и содержание
    'link' => '/news.php', //куда ведет ссылка в результатах поиска
    'where' => array() //дополнительные where-условия, например флаг active = '1' для товара или
    //created > date_add(now(), interval -7 day) для новости
    // и еще много чего можно придумать, если конечно надо
    ),
    'goods' => array('title', 'description') //ищем в таблице товаров по полям Заголовок и описание
    );

  • Animator

    Сообщения: 194 Репутация: N Группа: Кто попало

    Spritz 20 марта 2008 г. 15:27, спустя 5 часов 27 минут 48 секунд


    обычный поиск совпадений — WHERE `field` LIKE '%поисковой запрос%' (это самое простое)


    я так понял по этому принципу можно задавать в поиске только одно слово или слова расположенные подряд и только в одном поле?
    и для каждого поля надо создавать отдельный запрос?


    полнотекстовый поиск — http://www.mysql.ru/docs/man/Fulltext_Search.html


    сделал как сказано здесь:

    $query_search = "SELECT name_show, desc_show, other_show, extend_show FROM ge_show
    WHERE MATCH (name_show,desc_show,other_show,extend_show) AGAINST ('database');";

    выдает - Can't find FULLTEXT index matching the column list
  • Animator

    Сообщения: 194 Репутация: N Группа: Кто попало

    Spritz 20 марта 2008 г. 15:29, спустя 2 минуты 55 секунд


    а если самому начинать писать, то надо определиться с реализацией
    к примеру есть такой вариант результатов:



    мне бы пока хоть из одной таблицы вывести результат да еше и правильный…
  • Animator

    Сообщения: 194 Репутация: N Группа: Кто попало

    Spritz 20 марта 2008 г. 15:38, спустя 8 минут 24 секунды


    сделал как сказано здесь:
    выдает - Can't find FULLTEXT index matching the column list


    разобрался. надо было поставить индекс FULLTEXT на поля в которых происходит поиск
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 20 марта 2008 г. 15:39, спустя 41 секунду

    для поиска по MATCH - AGAINST тебе еще нужно создать полнотекстовые (FULLTEXT) индексы на полях


    ALTER TABLE `pages` ADD FULLTEXT `search` (
    `name_show` ( 1024 ) ,
    `desc_show` ( 1024 ) ,
    `other_show` ( 1024 ) ,
    `extend_show` ( 1024 )
    )


    я только не уверен в размерах индекса, тут надо гугл пошерстить
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 20 марта 2008 г. 16:12, спустя 33 минуты 48 секунд

    я так понял по этому принципу можно задавать в поиске только одно слово или слова расположенные подряд и только в одном поле?
    и для каждого поля надо создавать отдельный запрос?

    нет, можно разбить по пробелу и в запросе будет `field` LIKE '%поисковой%' OR `field` LIKE '%запрос%'

    но лучше используй полнотекстовый поиск, да, там индекс надо ставить на поля
    все умрут, а я изумруд
  • Animator

    Сообщения: 194 Репутация: N Группа: Кто попало

    Spritz 20 марта 2008 г. 16:19, спустя 7 минут 1 секунду

    спасибо большое разобрался

    эта статья http://www.mysql.ru/docs/man/Fulltext_Search.html очень помогла.

    пока вроде все получается
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 20 марта 2008 г. 16:23, спустя 3 минуты 57 секунд

    это не статья, это мануал
    все умрут, а я изумруд
  • Animator

    Сообщения: 194 Репутация: N Группа: Кто попало

    Spritz 20 марта 2008 г. 17:00, спустя 36 минут 52 секунды

    мне бы еше хорошую статью найти как это все дальше красиво и грамотно оформить, было бы вообще замечательно….
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 20 марта 2008 г. 17:02, спустя 1 минуту 51 секунду

    а что тебе оформить надо?
    это уже зависит от структуры твоих страниц и материалов, где ты ищешь
    все умрут, а я изумруд
  • Animator

    Сообщения: 194 Репутация: N Группа: Кто попало

    Spritz 21 марта 2008 г. 10:44, спустя 17 часов 41 минуту 59 секунд

    ну в принципе я думаю мне нужно лучше ознакомится со строковыми функциями и репу пару раз почесать и сам все доделаю.

    хотя от советов не откажусь…
  • pasha

    Сообщения: 1048 Репутация: N Группа: Адекваты

    Spritz 21 марта 2008 г. 12:44, спустя 2 часа 19 секунд

    А зачем подобные темы снова создавать? >:(
  • Animator

    Сообщения: 194 Репутация: N Группа: Кто попало

    Spritz 21 марта 2008 г. 14:59, спустя 2 часа 14 минут 48 секунд

    а что уже была такая тема? можно ссылку?

Пожалуйста, авторизуйтесь, чтобы написать комментарий!