[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Поиск boolean
linklink26
Есть такая задача, искать быстро данные по огромной таблице с 1 млн записей.
Осложняется это тем, что необходимо предоставлять только релевантные результаты.

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

Я вот о чем, например запрос TBU-CA065, а поиск выдает:
TBU-CA040-050-WH
TBU-CA025-050-WH

Поэтому я решил обрезать через регулярку результаты по вхождению ключа, т.е.

foreach ($result as $val)
{
if (preg_match(""))
}


Но теперь другая проблема, запрос 111-111 не найдет 111 111 и наоборот, с пробелом не найдет тоже с тире.
А так же не найдет например TBU-WH так как нужно дословное вхождение.

Лайк же искал по всем частям и выдавал очень релевантно.

Пробовал разбивать по пробелам и тирешкам запрос, он тогда искал по TBU и выдавал все что есть с TBU, а там сотни левых номеров.

Подскажите куда копать спс.)


SELECT *,
MATCH (pole1, pole3, pole5) AGAINST ('".addslashes($_REQUEST['search'])."' IN BOOLEAN MODE) AS REL
FROM `1s`
WHERE MATCH (pole1, pole3, pole5) AGAINST ('".addslashes($_REQUEST['search'])."' IN BOOLEAN MODE)
ORDER BY REL DESC
LIMIT
0,20;



$string = $row['pole1'].' '.$row['pole3'].' '.$row['pole5'];

if (preg_match("/".$search_word."/i", $string)) {
$flag1=1;
// echo "Вхождение найдено.";
} else {
// echo "Вхождение не найдено.";
$flag1=0;
}
Быстрый ответ:

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