Скрипт поиска на PHP
Нужен скрипт поиска на PHP для софтового портала.
Скрипт будет производить поиск программ по базе mysql.
Алгоритм работы скрипта:
word – поисковое слово или фраза.
Поиск производится в кратком описании программ desc_small, полном описании description и в названии name.
Скрипт должен поддерживать 2 языка – русский и английский.
Язык сайта – это переменная $LANG_NOW – ru или en.
А также есть переменная $V_PREF для переменных, ее значение:
$V_PREF = ($LANG_NOW=="en") ? "_en" : "";
Т.е. так пишутся переменные: $row[‘name’.$V_PREF], $row[‘version’.$V_PREF] и т.п.
Еще в базе есть поле my_lang:
0 - программа имеет только русское описание;
1 - только английское;
2 - и русское и английские.
Т.е. при поиске на русском языке ищем только среди программ где: my_lang!=1, а на английском my_lang>0.
Строку поиска нужно проверять: длина от 2 до 64 символов.
А также очищать от ненужных символов.
Еще при поиске нужно исключать некоторые слова, например: номера версий и слова: alpha, beta, free, pro, lite и т.п (лучше чтобы эти слова задавались в виде массива в конфиге и я мог добавлять новые слова).
Настройки поиска:
1) Поиск каждого слова из фразы, поиск фразы целиком.
2) Поиск в названии, поиск в описании, везде.
При поиске каждого слова фразы – искать не более 5 слов.
Результаты поиска (названия программ с найденными фразами) выводить в виде анонса в начале страницы, если спец. флажок ($SHOW_ANOUNCE2) включен.
А также результаты поиска (названия с версиями программ) записывать (через пробел) в переменные:
$keywords (без версий) и $descript (с версиями).
Результаты поиска выводятся в следующем порядке:
1) Результаты с word в начале названия.
2) Результаты с word в середине и конце названия.
3) Результаты с word в описании.
Если word найдено в названии – выводим название и краткое описание программы без подсветки.
Если word найдено в кратком описании – выводим название и краткое описание, а word подсвечиваем красным жирным шрифтом.
Если word найдено в полном описании – выводим название и куски полного описания программы в следующем формате:
Текст…word…текст…word…текст…
Т.е. выводим найденные слова, слева и справа от которых выводится по несколько слов из полного описания (кажется такое делается через preg_match).
Длина участков текста между словами word задается в конфиге.
Поиск производится по релевантности – т.е. сначала выдаются самые подходящие результаты, а потом близкие к ним.
Скрипт поиска уже есть, если хотите, то можете переписывать из него.
Но этот скрипт написан очень нерационально и половины описанных функций в нем не нет.
Прошу уделить особое внимаение производительности, т.к. этот скрипт является самым посещаемым и используется на 5 порталах.
Для работы выдам: мой скрипт поиска (поможет ознакомиться с общими принципами ораганизации сайта), структуру таблицы, в которой будет призводиться поиск.
Слушаю ваши предложения по срокам и ценам.