Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > реализовать поиск данных в БД


Автор: JohnOSTend 11.1.2009, 21:59
Люди, помогите реализовать поиск по БД.
Допустим искать надо в поле text... у меня получилось только это:
$memo = mysql_query("SELECT id,title,description FROM data WHERE MATCH(text) AGAINST('$search')",$db);
И если я буду искать например "бумага", то он найдет только "бумага". А "Бумага", "БУМАГА" или "бумажный","Бумажный" не находит.
Я прикрепил файл со скриншотом, на котором я искал слово "поиск" и он нашел "поиска" и при этом при этом найденое слово посик выделено желтым цветом.
Как сделать такой поиск?? Помогите плз!
И если я что-то не указал, пишите, я добавлю.
http://pic.ipicture.ru/uploads/090111/HaPQPgkbeM.gif

Автор: ksnk 12.1.2009, 00:41
JohnOSTend, Индекс в таблице полнотекстовый? Видимо нет, иначе был бы не важен регистр символов.

А вот чтобы он по "бумаге" искал "бумажный" - его надо учить русскому языку...  smile Проще, imho, забить, пусть этим Гугель занимается...

Хотя
-- можно поискать в гугле тему "эвристическое, без словаря. извлечение корня" (это где-то на dklab-е), и передрать алгоритм. Алгоритм иногда ошибается  smile 
-- можно прикупить где-нибудь "словарь словоформ русского языка". 

В результате фраза поиска трансформируется в набор словоформ, либо в набор корней слов, по которым уже и ищем. Вот, в общем-то и вся известная мне теория  ...

Автор: skyboy 12.1.2009, 01:40
Цитата(ksnk @  11.1.2009,  23:41 Найти цитируемый пост)
эвристическое, без словаря. извлечение корня

http://ru.wikipedia.org/wiki/%D0%A1%D1%82%D0%B5%D0%BC%D0%BC%D0%B8%D0%BD%D0%B3. не эвристическое(алгоритм жестко определен), не корня. но может прокатить.
или словарь. т.е. приведение слов к некой "нормальной" форме(например, прилагательніе - к существительному, существительное - к единственному числу, именительному падежу и т.п.)
впрочем, лучше ещё и навесить алгоритм http://www.google.com/search?hl=en&q=%D0%B2%D1%8B%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5+%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%B2%D1%8B%D1%85+%D1%81%D0%BB%D0%BE%D0%B2&btnG=Search&lr=lang_en|lang_ru|lang_uk, ибо поиск по "и" или "далее" не пригодится ровно никому.

Автор: JohnOSTend 12.1.2009, 20:21
Вы меня не совсем поняли, я не хочу все усложнять, хочу просто чтобы он искал слово "бумага" даже если оно будет примерно так записано
блаблаблаБумАгАблаблабла и если я буду искать "бумага" он найдет мне блаблаблаБумАгАблаблабла, причем бумага выделит жирным шрифтом например.

Автор: awers 12.1.2009, 20:38
ну в mysql есть like где к примеру

Код

select * from table where content LIKE '%бумага%'

Автор: JohnOSTend 12.1.2009, 20:55
Люди, не сочтите за наглость - но не могли бы вы составить код с пояснением по шагам. Я просто не очень врубаюсь в эти запросы.

Автор: awers 12.1.2009, 20:57
кстати, не используя ранее посоветованные технологии 
Цитата

И если я буду искать например "бумага", то он найдет только "бумага". А "Бумага", "БУМАГА" или "бумажный","Бумажный" не находит.

это так и останется.

Добавлено через 1 минуту и 44 секунды
Код

$memo = mysql_query("SELECT id,title,description FROM data WHERE text LIKE '%$search%' ",$db);

Автор: serzhb 13.1.2009, 12:29
Полнотекстовый поиск в MySQL оставляет желать лучшего. Можно конечно поизвращаться и довести до ума, но это отразиться на скорости работы. Лучше переходи на PostgreSQL, модуль tsearch2, там учёт русской морфологии имеется.

Автор: JohnOSTend 13.1.2009, 12:46
serzhb 
Цитата

Лучше переходи на PostgreSQL, модуль tsearch2, там учёт русской морфологии имеется.

Можно об этом по подробнее (я первый раз об этом слышу)

Автор: serzhb 13.1.2009, 12:54
Цитата(JohnOSTend @ 13.1.2009,  12:46)
serzhb 
Цитата

Лучше переходи на PostgreSQL, модуль tsearch2, там учёт русской морфологии имеется.

Можно об этом по подробнее (я первый раз об этом слышу)

Подробнее надо гулить, статей на тему полно, например:
http://www.citforum.ru/database/postgres/fts/

Автор: JohnOSTend 14.1.2009, 19:25
Жаль... прийдется самому решать данную задачу, тему можно закрывать.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)