|
|
|
| Привет.. Вот такой у меня вопрос. Поступила мне поисковая фраза из формы.
Например : деревянное окно
Как я делал раньше (делал тупо):
1) Я разделял фразу на слова
2) Отнимал у каждого слова по последней букве
3) Искал сначала всю фразу, а потом по каждому из слов
4) А в ответе знаете, что у меня было? :-)))) Ужас просто
Например если есть статья, содержащая деревянное окно , в результате поиска, у меня было 3 ответа)))))( по "деревянное окно", по "деревянно" и по "окн") Просто тогда мне не хотелось заморачиваться. А сейчас уже надо задуматься..Использовал LIKE.
Вопрос в студию:
Как мне избавиться от таких результатов? Использовать релевантность и FULLTEXT?
Типа
SELECT * FROM table WHERE MATCH(column) AGAINST('text')
|
???? На самом деле идеи есть.. Просто хочу у вас поинтересоваться... | |
|
|
|
|
|
|
|
для: spiner
(28.09.2005 в 11:38)
| | У меня вообще поиск сделан очень просто. Вот код:
$srch=explode(" ", $srch);
@ $query="SELECT * FROM ИМЯ ВАШЕЙ ТАБЛИЦЫ WHERE MATCH(ПОЛЕ ПО КОТОРОМУ ИСКАТЬ) AGAINST ('$srch[0]*' IN BOOLEAN MODE)";
/* for ($i=0; $i<count($srch); $i++)
{
$query.="+".$srch[$i]." ";
}
$query.="' IN BOOLEAN MODE)";*/
for ($i=0; $i<count($srch); $i++)
{
$query.=" AND MATCH(name) AGAINST ('$srch[$i]*' IN BOOLEAN MODE)";
}
#$query.="' IN BOOLEAN MODE)";
$result=mysql_query($query);
@ $num=mysql_num_rows($result);
|
Меня пока устраивал. Может и тебе подойдёт. | |
|
|
|
|
|
|
|
для: SMAlik
(28.09.2005 в 12:02)
| | извините, а прокомментировать можете? | |
|
|
|
|
|
|
|
для: P@Sol
(28.09.2005 в 12:05)
| |
elseif ($search=="name") // Проверяем, критерий по чему ищем, у меня на сайте по коду и по имени. В данном случае по имени
{
$srch=explode(" ", $srch); //полученную подстроку из текстового поля делим на слова и запихиваем в массив
@ $query="SELECT * FROM 'ВАША ТАБЛИЦА' WHERE MATCH(ПОЛЕ ТАБЛИЦЫ) AGAINST ('$srch[0]*' IN BOOLEAN MODE)"; //создаём запрос в который прописываем где ищем и заносим первое слово из массива (см выше)
for ($i=0; $i<count($srch); $i++) //если несколько слов, то запускаем цикл на создание полной строки запроса
{
$query.=" AND MATCH(ПОЛЕ ТАБЛИЦЫ) AGAINST ('$srch[$i]*' IN BOOLEAN MODE)"; // добавляем последующие слова к первому
}
$result=mysql_query($query); // выполняем созданный нами запрос
@ $num=mysql_num_rows($result);
}
|
Вот и всё. Просто. | |
|
|
|
|
|
|
|
для: SMAlik
(28.09.2005 в 12:15)
| | Гы. Спасибо! Буду пробовать! | |
|
|
|
|
|
|
|
для: spiner
(28.09.2005 в 12:26)
| | Да пожалуйста! | |
|
|
|
|
|
|
|
для: SMAlik
(28.09.2005 в 12:15)
| | Кстати!! Если у тебя в массиве слов больше одног, то первое слово у тебя будет искаться ДВА раза:(наверное)
@ $query="SELECT * FROM 'ВАША ТАБЛИЦА' WHERE MATCH(ПОЛЕ ТАБЛИЦЫ) AGAINST ('$srch[0]*' IN BOOLEAN MODE)"; // ПЕРВЫЙ РАЗ
for ($i=0; $i<count($srch); $i++) //если несколько слов, то запускаем цикл на создание полной строки запроса
{
$query.=" AND MATCH(ПОЛЕ ТАБЛИЦЫ) AGAINST ('$srch[$i]*' IN BOOLEAN MODE)"; // ВТОРОЙ РАЗ
}
|
| |
|
|
|
|
|
|
|
для: spiner
(28.09.2005 в 14:40)
| | Ничего подобного не наблюдал. Вроде всё правильно ищет | |
|
|
|
|
|
|
|
для: SMAlik
(29.09.2005 в 08:29)
| | нашел ссылку по теме...очень хорошо там все объяснено | |
|
|
|