Морфология?

seva2

Партнер PHPClub.ru
Морфология?

Народ вот смотрите запрос:
http://yandex.ru/yandsearch?rpt=rad&text=самсунг

Как бы в поиске он выделяет слово на английском, то есть есть как то переводит)

Как такое реализовать с помошью Fulltext?

-~{}~ 06.07.08 13:13:

И еще есть вопрос:
"SELECT products_name, MATCH (products_name) AGAINST ('".$_GET['s']."') AS score, COUNT(products_id) as n FROM products_description_index WHERE MATCH (products_name) AGAINST ('".$_GET['s']."') having score>3 order by score desc "

Как прописать так, чтобы having score>3 применялся только тогда когда N>30?
 

Gas

может по одной?
только тогда когда N>30
поставить проверку на n перед score

Как такое реализовать с помошью Fulltext?
Fulltext не имеет отношения к переводу самсунг в samsung.
Не знаю как там реализовано, но возможно просто делается translit, а там уже всё стандартно.
 

seva2

Партнер PHPClub.ru
Неее... там IF нужен в доке не могу найти

having если N >30 тогда score>3 (использовать)
 

seva2

Партнер PHPClub.ru
Тогда фильтор по score не применять)

-~{}~ 06.07.08 15:02:

Расскажу зачем это сделано:

Если вводят nokia 3250 изумительно результаты показываются

Если вводят
Дата кабель nokia 3250 то сначало пойдут результаты как у запроса nokia 3250 а потом ниже пойдет мусор с ключевиком Дата кабель
 

seva2

Партнер PHPClub.ru
"SELECT products_name, MATCH (products_name) AGAINST ('".$_GET['s']."') AS score, COUNT(products_id) as num FROM products_description_index WHERE MATCH (products_name) AGAINST ('".$_GET['s']."') group by products_id having IF (num > 30, score > 3, 1) order by score desc "

Не отрабатывает!

Результатов больше 400
score в результатах есть меньше 3!
 

zerkms

TDD infected
Команда форума
я написал условие как ты и попросил

score в результатах есть меньше 3!
значит в этих записях N > 30 => при score <= 3 запись в выборку не попадает
 

seva2

Партнер PHPClub.ru
не совсем понял, может не правильно объяснил!

Мне надо если найдено больше 30 результатов, применить по ним фильтр score >3

А если меньше 30, то не применять фильтр!
 

zerkms

TDD infected
Команда форума
не нужно делать этого в запросе :)

ps: а если результатов больше 30, но при score > 3 их всего 1? :))
 

seva2

Партнер PHPClub.ru
такого быть не может из-за структуры нашего каталога!

К телефону может быть максимум 20 аксов, + 5-6 дубликатор

Почему не стоит?
 

seva2

Партнер PHPClub.ru
А это будет не более нагрузно? дважды Fulltext юзать ?
 

zerkms

TDD infected
Команда форума
seva2
сначала покажи запрос, который будет делать ТУ ЖЕ РАБОТУ, что и я предложил кодом, а потом будем мерить :)
 

seva2

Партнер PHPClub.ru
запрос на число записей, потом уже сформируй нужный запрос

"SELECT products_name, MATCH (products_name) AGAINST ('".$_GET['s']."') AS score, COUNT(products_id) as n FROM products_description_index WHERE MATCH (products_name) AGAINST ('".$_GET['s']."') order by score desc "

Если больше 30
"SELECT products_name, MATCH (products_name) AGAINST ('".$_GET['s']."') AS score, COUNT(products_id) as n FROM products_description_index WHERE MATCH (products_name) AGAINST ('".$_GET['s']."') having score>3 order by score desc "

двойная работа)
 

zerkms

TDD infected
Команда форума
ппц.... помощник санитара, ну ты что такой :))))))))

php:
if (больше 30) {
$sql .= '...'
}
 

seva2

Партнер PHPClub.ru
больше 30 - чтобы узнать нам сколько результатов, надо выполнить sql ? верно!?

if (больше 30) {
Дополняем проверку на scrore
Выполняем второй раз запрос.


Верно ?)
 

zerkms

TDD infected
Команда форума
верно. выполняется два запроса.
сначала на подсчёт числа результатов, затем принимаешь решение, что делать дальше.
 
Сверху