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

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

  • ilma55

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

    Spritz 9 февраля 2010 г. 4:54

    Здравствуйте!

    вот, столкнулся с проблемой!

    нужен поиск по сайту!

    как любойй начинающий я пользуюсь конструкцией:
    $query = "SELECT * FROM content WHERE (title LIKE '%" . mysql_real_escape_string($slovo) . "%' ) OR (text LIKE '%" . mysql_real_escape_string($slovo) . "%' )";

    как бы все хорошо… НО!!!
    мне нужно чтоб было как у гугла!
    а точнее:
    чтоб выводился кусок текста. результат чтоб был типа такого:
    ….. the most interesting and cognitive information on coffee from all over the world….

    как вы догадались искомое слово это кофе

    видите, текст тут обрезается и выводится отрывок…

    и еще выводится только конкретный текст.

    точнее если есть большая буква, то будет только с большой буквы…

    идея есть - преобразовывать искомое слово через strtolower, strtoupper…
    но как избавиться от повторений?
  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 9 февраля 2010 г. 5:18, спустя 24 минуты 14 секунд

  • ilma55

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

    Spritz 9 февраля 2010 г. 7:57, спустя 2 часа 38 минут 58 секунд


    http://www.symfony-project.org/api/1_4/TextHelper#method_excerpt_text

    highlight_text а потом excerpt_text


    спасибо!!!

    но по подробнее… че то я не понял…

    highlight и excerpt это ведь не стандартные функции…
  • Ewg777

    Сообщения: 510 Репутация: N Группа: Джедаи

    Spritz 9 февраля 2010 г. 8:17, спустя 19 минут 24 секунды

    ilma55, иди по сцылки
  • VaseninM

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

    Spritz 9 февраля 2010 г. 8:20, спустя 3 минуты 32 секунды

    ilma55,
    Я не сторонник фреймворков (наверное зря). Я сделал бы примерное так. Точнее первая мысль такая.
    Разбить найденный текст на слова (explode(' ', $text);)
    Проверять каждый элемент массива (слово) на присутствие в нем искомого слова. Ведь у нас может быть и запятая рядом. И точка.
    Если искомое слово есть в нашем элементе, то выделить его (str_ireplace($str, "<b>".$str."</b>", $text)) и записать порядковый номер массива.
    Теперь сделать for от $i-$k до $i+$k, где и порядковый номер массива, в котором твое слово, к - сколько слов будет по сторонам от найденного. Объединяем эти слова через пробел.
    Прибавляем точки справа и слева.
    Примерно так.
  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 9 февраля 2010 г. 8:49, спустя 28 минут 24 секунды

    VaseninM, я ж не заставляю его пользоваться всем Симфони. Пусть только этот Text_Helper возьмет оттудова.

    По поводу посторений - я х3
  • VaseninM

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

    Spritz 9 февраля 2010 г. 9:59, спустя 1 час 10 минут 17 секунд

    Абырвалг, я понимаю. Ну вот я ему свой вариант предложил. Ты свой. Я бы воспользовался твоим ибо разрабы симфони пишут качественнее, чем я. Хотя нет. Там наверняка используются другие встроенные в симфони функции. Ну в общем я думаю он и разбрется и, если будут вопросы, то спросит.
    Спустя 246 сек.
    Повторений чего? Это если слово встречается два раза? Это получается, нужно оба выделять. Ну если использовать мой вариант, то порядковый номер записывать несколько раз и выделять тоже несколько раз. В таком случае придется смотреть вариант, где края двух слов пересекаются.
    Спустя 73 сек.
    И вообще, наверное лучше юзать прег_реплейс…
  • Faster

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

    Spritz 9 февраля 2010 г. 11:46, спустя 1 час 47 минут 30 секунд

    ilma55, если индекс большой, юзай полнотекстовый поиск - MATCH (…
  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 9 февраля 2010 г. 13:53, спустя 2 часа 6 минут 15 секунд

    Faster, или search lucene. Или Sphinx
  • adw0rd

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

    Spritz 9 февраля 2010 г. 17:26, спустя 3 часа 33 минуты 8 секунд

    Sphinx рулит!
    adw/0
  • ilma55

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

    Spritz 10 февраля 2010 г. 5:25, спустя 11 часов 59 минут 14 секунд

    спасибо парни!

    сейчас буду разбираться…
  • ilma55

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

    Spritz 11 февраля 2010 г. 7:17, спустя 1 день 1 час 52 минуты

    я дико извиняюсь,а вот тут (на этом сайте) как реализован поиск???
  • Ewg777

    Сообщения: 510 Репутация: N Группа: Джедаи

    Spritz 11 февраля 2010 г. 7:27, спустя 9 минут 46 секунд

    ilma55, сотня китайцев + 15 матричных принтеров + стеллаж 2x15 метров.
  • adw0rd

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

    Spritz 11 февраля 2010 г. 7:28, спустя 1 минуту 27 секунд


    ilma55, сотня китайцев + 15 матричных принтеров + стеллаж 2x15 метров.
    я обожаю твои высказывания! :)
    Спустя 14 сек.
    ilma55, вот так http://adw0rd.ru/2009/smf-sphinx/
    adw/0
  • ilma55

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

    Spritz 11 февраля 2010 г. 7:31, спустя 2 минуты 31 секунду



    ilma55, сотня китайцев + 15 матричных принтеров + стеллаж 2x15 метров.
    я обожаю твои высказывания! :)
    Спустя 14 сек.
    ilma55, вот так http://adw0rd.ru/2009/smf-sphinx/


    ага

    я как раз и читаю это!
    спасибо!
    очень позновательно!

    респект!!!

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