Forum Webscript.Ru

Программирование => PHP => Тема начата: Unregistered от 26 Июля 2002, 09:56:20

Название: Вопрос по написанию поисковой системы?
Отправлено: Unregistered от 26 Июля 2002, 09:56:20
Как оптимальнее сделать следующую задачу:
Все данные хранятся в MySQL, пользователь кидает запрос и у него находятся некоторые данные по запросу, потом он вводит другой запрос и указывает искать в найденном. Как это лучше всего реализовать?
Название: Вопрос по написанию поисковой системы?
Отправлено: Меняздесьдавнонет от 26 Июля 2002, 10:21:25
Пиши в два этапа.
сначала напиши поиск просто, а потом - в найденном.
Если достаточно свежая версия mysql, и с правильно настроенным чарсетом, и искать хочется "по-взрослому", то почитай в мануале про MATCH ... AGANIST
Если нет, то просто - select * from table1 where textfield LIKE searchword1 and  textfield LIKE searchword2 ...
и так по всем таблицам.
Название: Вопрос по написанию поисковой системы?
Отправлено: Foshvad от 26 Июля 2002, 20:24:41
Я сохраняю в сессии найденные в первый раз идентификаторы строк, а при втором ("искать в анйденом") запросе пишу .. id IN(1,2,3,4)
В принципе пожно в value к checkbox\'у поставить эти самые 1,2,3,4 - только проверить перед на служебыне символы
Название: Вопрос по написанию поисковой системы?
Отправлено: Макс от 26 Июля 2002, 22:42:52
ИМХО самы простой вариант:
Выводя форму просто в ее текстовое поле выведи текст по которому велся поиск. Если чел захочет искать в найденном то он просто добавит в нее текст и нажмет "Искать".

Более сложный вариант:
В форме 2 поля:


+checkbox (искать в найденом)
Hidden сначало пустой, а если поиск был произведен то то в него пиши текст по которому был поиск:
value="<текст первого поиска>">
Поиск в найденом будет примерно такой:
SELECT * FROM tabname WHERE
(col LIKE "%$oldsearch[0]%") AND
(col LIKE "%search%")
Далее для old_search будет два поля в форме :
value="<текст первого поиска>">
value="<текст второго поиска>">
А поиск будет :
SELECT * FROM tabname WHERE
(col LIKE "%$oldsearch[0]%") AND
(col LIKE "%$oldsearch[1]%") AND
(col LIKE "%search%")

PS
Это мне только что в голову моча ударила и я все это придумал. На практике такого не делал, поэтому может что и не правильно. Хотя вроде все реально если с массивами умеешь работать.
Насчет варианта Foshvad-а то ИМХО если будет найдено 15 000 строк по запросу пользователя и потом все это писать в в сессию - будт тормозить (+еще буде длинный запрос к БД если буде поиск в найденном)
Название: Вопрос по написанию поисковой системы?
Отправлено: Unregistered от 29 Июля 2002, 04:46:18
А имеет ли смысл первый поиск заносить во временную таблицу MySQL, а потом последующие поиски вести во временной таблице, а в конце сессии удалять временную таблицу?

P.S.: В идеале надо придумать алгоритм поисковой системы на PHP+MySQL, учитывая, что за 1 поиск будет находится очень много записей и чтоб "поиск в найденном" тоже можно было производить много раз и это не очень влияло на скорость поиска. Мот кто-нибудь уже сталкивался с этим или знает где можно почитать хорошие доки по написанию поисковых систем ???
Название: Вопрос по написанию поисковой системы?
Отправлено: Alexandr от 29 Июля 2002, 10:05:44
У мя реализовано, то что Макс написал
http://www.autodealer.ru/db_part.php
Название: Вопрос по написанию поисковой системы?
Отправлено: Меняздесьдавнонет от 29 Июля 2002, 11:10:40
собственно, так все и ищут. Foshvad, все-таки, дал маху с in.
С временной таблицей заморочиваться не стоит. Ее создание, на 15 000 строк, будет явно дольше, чем создание датасета на 15 строк для вывода результатов на экран и более сложный последующий поиск.
Название: Вопрос по написанию поисковой системы?
Отправлено: Alexandr от 29 Июля 2002, 11:15:08
RomikChef иногда стоит делать вр. таблицу, чтобы ускорить сортировку.
Название: Вопрос по написанию поисковой системы?
Отправлено: Alexandr от 29 Июля 2002, 11:16:55
[OFF]Никто мне не подскажет что такое?
Все юзеры "Unregistered" у мя в Ignor List\'е...
Как от этого избавиться?[/OFF]
Название: Вопрос по написанию поисковой системы?
Отправлено: Foshvad от 29 Июля 2002, 11:36:55
Alexandr у меня чаво-то тоже. Видать к кто-то что-то в настройках форума поменял.
Название: Вопрос по написанию поисковой системы?
Отправлено: Меняздесьдавнонет от 29 Июля 2002, 11:39:03
Alexandr
чтобы ускорить сортировку, надо использовать индексы.

Вообще задача очень нечеткая.
Искать по словарям - это одно.
Полнотекстовый поиск - другое.
Название: Вопрос по написанию поисковой системы?
Отправлено: Tronyx от 29 Июля 2002, 11:55:55
Цитировать
Alexandr у меня чаво-то тоже. Видать к кто-то что-то в настройках форума поменял

У меня тоже самое, вчера появилось, а игнор пуст! Отправил Nas`у e-mail, может это он чё "натворил"?
Название: Вопрос по написанию поисковой системы?
Отправлено: Alexandr от 29 Июля 2002, 11:56:30
Цитировать
чтобы ускорить сортировку, надо использовать индексы.

Не только!!!
Временные таблицы ускоряют сортировку, если из большой таблицы выбирается мало данных.
Название: Вопрос по написанию поисковой системы?
Отправлено: Tronyx от 29 Июля 2002, 12:08:04
Цитировать
ИМХО самы простой вариант:
Выводя форму просто в ее текстовое поле выведи текст по которому велся поиск. Если чел захочет искать в найденном то он просто добавит в нее текст и нажмет "Искать".

А если чел заядлый ламер в трем колене? Лучше делать чекбокс.

Цитировать
RomikChef иногда стоит делать вр. таблицу, чтобы ускорить сортировку.

Но не в этом случае. :( Лучше индексы !!!

А кто поделится опытом, как лучше/быстрей/качественней ранжировать результаты?

P.S. Unregistered зарегистрируйся, меньше проблем будет остальным, в форуме глюк.
Название: Вопрос по написанию поисковой системы?
Отправлено: Меняздесьдавнонет от 29 Июля 2002, 12:10:10
И как ты определишь - много данных выберется или много?
Человек ясно написал - 15 тыщь строк. При том, что из них понадобится дай бог сотня.
MySQL к примеру, перестанет сортировать после того, как найдет на лимит записей. Будет быстро.
Название: Вопрос по написанию поисковой системы?
Отправлено: Tronyx от 29 Июля 2002, 12:10:23
Цитировать
если из большой таблицы выбирается мало данных.

ИМХО и не очень часто, тогда это оправдано.
Название: Вопрос по написанию поисковой системы?
Отправлено: Alexandr от 29 Июля 2002, 12:32:34
Индексы само собой.

Юзните сами.
Создайте большую таблицу 100000 записей.
Далее
CREATE TEMPORARY TABLE tmp_table SELECT..... WHERE col2 LIKE \'sdgsd\'
И SELECT * FROM tmp_table ORDER BY col
Или
SELECT..... WHERE col2 LIKE \'sdgsd\' ORDER BY col

И скажите о своих находках....
Название: Вопрос по написанию поисковой системы?
Отправлено: Меняздесьдавнонет от 29 Июля 2002, 12:38:44
match ... aganist ранжирует сам.
А вообще тут не еще давали ссылку на http://detail.phpclub.net/
?
Там есть статья на тему ранжировки.
Название: Вопрос по написанию поисковой системы?
Отправлено: Alexandr от 29 Июля 2002, 13:59:23
Цитировать
match ... aganist

А с какой версии?
RomikChef дай ещё ссылочек на тему.
Название: Вопрос по написанию поисковой системы?
Отправлено: Меняздесьдавнонет от 29 Июля 2002, 14:51:16
Сам я не пользовалмя. поэтому не могу ничего сказать
вот, человек занимался
http://www.xpoint.ru/cgi-bin/forum.cgi?action=thread&id=12966
Спроси на РНРКлубе - там наверняка тоже кто-то пользовался.
Название: Вопрос по написанию поисковой системы?
Отправлено: Alexandr от 29 Июля 2002, 15:33:16
Цитировать
Спроси на РНРКлубе - там наверняка тоже кто-то пользовался.

Да уж почитал статейки. Не катит для меня эта штука "*" не понимает, а только целиком слово.