[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Поиск по дб
Unlikely
Здравствуйте. Тут решил сделать поиск по базе.
Немного порыл интернет и вычислил что искать по базе можно с помощью LIKE '%текст%'. Но у меня возникли некоторые проблемы. Не могу понять как искать по нескольким словам. То есть если первое слово не найдено то искать по второму и так далее. Думаю можно сделать через OR, но на мой это будет слегка неудобно... Можете дать кокой нибудь простой пример реализации?



Спустя 10 минут, 54 секунды (26.05.2010 - 16:41) waldicom написал(а):
Можно использовать полнотекстовый поиск, но там есть тсвои ограничение.
Например движок должен быть MyISAM.

Тут на английском, сравнение на русском

Спустя 2 часа, 21 минута, 39 секунд (26.05.2010 - 19:03) Unlikely написал(а):
Не совсем понимаю что значит "Например движок должен быть MyISAM". И по всй видимости у меня не работает такой вариант.

При такой заявке
select * from `posts` match(title) against('blabla')
получаю ошибку.

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'match(title) against('blabla') LIMIT 0, 30' at line 1

P.S. У вас с аватаркой какие то проблемы кажется. Убейте её, страницы долго грузятся:)

Спустя 34 минуты, 21 секунда (26.05.2010 - 19:37) vagrand написал(а):
Используйте sphinx http://www.sphinxsearch.com/

Спустя 1 час, 3 минуты, 10 секунд (26.05.2010 - 20:40) Unlikely написал(а):
vagrand
Не хочется разбираться в чужом коде... smile.gif

Спустя 15 минут, 50 секунд (26.05.2010 - 20:56) Gabriel написал(а):
Unlikely
для полнотекстового поиска движек таблицы должен быть MyIsam, поиск работает только по полям типа text, varchar с поставленным full text индексом на них.
а чем не подходит вариант типа:
1. поискали одно слово.
2. не нашли совпадений.
3. запустили тот-же запрос но уже с другим ключевым словом.

Спустя 16 минут, 3 секунды (26.05.2010 - 21:12) Unlikely написал(а):
Цитата (Gabriel @ 26.05.2010 - 17:56)
1. поискали одно слово.
2. не нашли совпадений.
3. запустили тот-же запрос но уже с другим ключевым словом.

Устраивает полностью smile.gif
Вот я и хочу от чего то оттолкнуться. И я так понимаю, придётся в цикле запросы тогда отправлять? Что то не могу сообразить

Спустя 24 минуты, 23 секунды (26.05.2010 - 21:37) vagrand написал(а):
Цитата
Не хочется разбираться в чужом коде... smile.gif


А придется, если хотите чтобы усе быстро работало.

Спустя 55 минут, 27 секунд (26.05.2010 - 22:32) FatCat написал(а):
Цитата (Gabriel @ 26.05.2010 - 21:56)
чем не подходит вариант типа:
1. поискали одно слово.
2. не нашли совпадений.
3. запустили тот-же запрос но уже с другим ключевым словом.

Он будет намного медленней варианта:
Цитата (Unlikely @ 26.05.2010 - 17:30)
можно сделать через OR

Наиболее ресурсозатратная операция здесь - перебор строк таблицы. Лучше много поисков внутри одного перебора, чем много переборов внутри каждого поиска.

Спустя 5 часов, 42 минуты, 2 секунды (27.05.2010 - 04:14) Gabriel написал(а):
FatCat
Цитата
То есть если первое слово не найдено то искать по второму и так далее

ну это логично что будет медленнее. но как забабацать такой поиск через OR никак догадатся немогу.

Спустя 3 часа, 30 минут, 25 секунд (27.05.2010 - 07:45) Basili4 написал(а):
Если есть список Gabriel ключевых слов то нетрудно


WHERE text like '%key1%' or like '%key2%' or like '%key3%' ..........



Спустя 1 час, 25 минут, 23 секунды (27.05.2010 - 09:10) vagrand написал(а):
Ну што Вы все человеку советуете. Вы на ваш запрос через explain посмотрите и увидите какой он красивый. Выполнятся он будет уйму времени.
Уж если на то пошло пущай создает отдельную таблицу в которой для каждого слова будет отдельная строка, связывает с текущей и ищет уже по ней. Так будет гораздо быстрее.

Спустя 4 дня, 9 часов, 37 минут, 37 секунд (31.05.2010 - 18:48) Gabriel написал(а):
Basili4
Цитата
То есть если первое слово не найдено то искать по второму и так далее

значит ввели 20 слов ищем "слово1" нет результатов перешли к "слово2", а так получится, что ты сразу будеш искать все.

Спустя 28 минут, 58 секунд (31.05.2010 - 19:17) igor717 написал(а):
А чем не подходит вариант:
1. Разбить строку запроса на отдельный слова и загнать в массив
2. Переборам получившегося массива из отдельных слов сформировав массив с запросом
3. Распаковать массив с запросом в запросе к БД

Получится 1 обращение к БД вида

SELECT *  FROM `table`  WHERE content like '%key1%' or like '%key2%' or like '%key3%'


После распаковки конечно...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.