Автор Тема: Поиск по текстовой базе  (Прочитано 3005 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн dub

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 236
  • +0/-0
  • 0
    • Просмотр профиля
    • http://binartis.com/
Поиск по текстовой базе
« : 12 Мая 2002, 16:16:00 »
Есть нехитрая текстовая база, организованная примерно следующим образом:

$id1||$xx1::$yy1::$zz1
$id2||$xx2::$yy2::$zz2
$id3||$xx3::$yy3::$zz3

Поле $id - ясное дело - id.
Поле $xx - скажем, текстовое.
Поля $yy, $zz - численные.

Нужно поиск. Критериям поиска - текст, сравниваемый с $xx (скажем, с помощью функции strstr()), $yymin, $yymax, $zzmin, $zzmax.

Итак, обхожу я все строки базы и заношу, скажем, в массив значения id всех позиций, удовлетворивших все критерии поиска (за базовый вариант возьмем логику "И").

Что дальше делать с этим массивом? Как выводить результаты по 10, скажем, на странице? Массив должен быть глобальным? Или результат нужно сохранить во временном файле? Или еще как-нибудь? Что должно произойти при повторном поиске?

Всем заранее спасибо.

Оффлайн Oak

  • Дерево
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1481
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Поиск по текстовой базе
« Ответ #1 : 12 Мая 2002, 18:24:56 »
Тебе надо заносить в массив только первые (вторые, третьи..) 10 позиций. (Это если ты не сортируешь).

Но для перегруженного запросами сайта - да можно кешировать в файл результаты поиска (указывая какой именно поиск делался).
[основной броузер - SeaMonkey] Netscape Communicator 4 - is the best :) // see sources

Оффлайн Britva

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1660
  • +0/-0
  • 0
    • Просмотр профиля
    • http://eugeny.com
Поиск по текстовой базе
« Ответ #2 : 12 Мая 2002, 18:26:47 »
Можно сделать так, прочитать в массив весь файл, с помощью file
и осуществлять поиск уже в нем, т.е. последовательно обходить все эл-ты массива и выводить рез-т.
а при повторном поиске - снова, считать, искать, и т.д.
Евгений aka Razor,

Оффлайн dub

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 236
  • +0/-0
  • 0
    • Просмотр профиля
    • http://binartis.com/
Поиск по текстовой базе
« Ответ #3 : 12 Мая 2002, 18:54:28 »
То есть, прочитать весь файл в массив с помощью file(), провести выборку в массив $selection=array(), подсчитать количество его элементов. Если количество его элементов <= 10 - вывести. Если больше десяти - вывести и поставить ссылку на те же действия, но с переменной, скажем, $desyatok = 2. Те же действия, если установлена переменная $desyatok, опять проделывают все с самого начала, но выводят вторые 10 элемента вновь полученного массива $selection, ссылку с переменной $desyatok равной ($desyatok-1) и ссылку с переменной $desyatok равной ($desyatok+1), если количество элементов массива больше $desyatok*10...
Таким образом, каждый раз задаются все критерии поиска, осуществляется полная выборка и ее обработка. Никаких сессий, единожды полученного и сохраненного массива или подобной лабуды, я правильно понял?

Оффлайн Britva

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1660
  • +0/-0
  • 0
    • Просмотр профиля
    • http://eugeny.com
Поиск по текстовой базе
« Ответ #4 : 12 Мая 2002, 18:58:16 »
вообщем да.
Евгений aka Razor,

Оффлайн Oak

  • Дерево
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1481
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Поиск по текстовой базе
« Ответ #5 : 12 Мая 2002, 19:10:38 »
Ессно, если массив >1000 то будет тормозить  :^))))
[основной броузер - SeaMonkey] Netscape Communicator 4 - is the best :) // see sources

Оффлайн dub

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 236
  • +0/-0
  • 0
    • Просмотр профиля
    • http://binartis.com/
Поиск по текстовой базе
« Ответ #6 : 12 Мая 2002, 19:21:36 »
Гы.. К данному случаю не относится, но все-таки интересно..
Скажем, база на >1000 элементов, и организую я ее, к примеру, уже с помощью MySQL (насколько я понимаю, текстовой такую базу делать - уже маразм, или не в этом дело?). И как дело обстоит в этом случае? Логика работы поиска будет оставаться той же? Только запросы изменятся?

Оффлайн dub

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 236
  • +0/-0
  • 0
    • Просмотр профиля
    • http://binartis.com/
забыл..
« Ответ #7 : 12 Мая 2002, 19:23:49 »
Britva , Oak, спасибо огромное.. :)

Оффлайн Britva

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1660
  • +0/-0
  • 0
    • Просмотр профиля
    • http://eugeny.com
Поиск по текстовой базе
« Ответ #8 : 12 Мая 2002, 19:47:36 »
select from table where name=\'lalaa\'
select from table where name like \'%template%\'
....
а разбивать на страницы с помощью select ... limit start,count
Евгений aka Razor,

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28