The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Сортировка результатов выборки по релевантности"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы WEB технологии (Public)
Изначальное сообщение [ Отслеживать ]

"Сортировка результатов выборки по релевантности"  
Сообщение от Urms email(ok) on 02-Янв-08, 03:35 
Есть полнотекстовый поиск по ключевым словам. Для сортировки использую довольно стандартный подход:

SELECT DISTINCT product_name,
MATCH (keywords) AGAINST ('CONSOLIDATED* 16* bearing*' IN BOOLEAN MODE) AS rate
FROM _TT
WHERE MATCH ( keywords ) AGAINST ('CONSOLIDATED* 16* bearing*' IN BOOLEAN MODE ) > 0
ORDER BY rate DESC
LIMIT 0,30

Все бы хорошо, но когда количество записей в результате переваливает за 50 000 выборка делается около 2 секунд, а с учетом того, что общее количество записей более 5 миллионов, системе будет где потормозить. При этом, если убрать ORDER BY, то такое же количество записей выбирается 0,006 с. Очевидно, разница огромная.

Каким образом можно выкрутиться в данной ситуации?

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Сортировка результатов выборки по релевантности"  
Сообщение от sargio (ok) on 02-Янв-08, 19:56 
может попробовать отказаться от boolean mode, тогда он сортирует по релевантности?
придется только настраивать минимальную длину слов, так как по умолчанию она 3 символа.
еще есть проблема что если текста мало и слово встречается часто, то оно будет причислено к стопслову и будет игнорироваться при поиске.

попробуйте также (может он не склеивает запросы)

SELECT DISTINCT product_name,
MATCH (keywords) AGAINST ('CONSOLIDATED* 16* bearing*') AS rate
FROM _TT
WHERE MATCH ( keywords ) AGAINST ('CONSOLIDATED* 16* bearing*' IN BOOLEAN MODE )
ORDER BY rate DESC
LIMIT 0,30


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Сортировка результатов выборки по релевантности"  
Сообщение от Urms email(ok) on 02-Янв-08, 20:30 
В boolean mode он тоже сортирует по релевантности, но не учитывает то, что ключевые слова могут повторятся . Это меня устраивает учитывая специфику базы, а вот одинаковых слов будет много.

В общем-то задача в том, как ускорить сортировку.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Сортировка результатов выборки по релевантности"  
Сообщение от sargio (ok) on 02-Янв-08, 20:44 
>В boolean mode он тоже сортирует по релевантности, но не учитывает то,
>что ключевые слова могут повторятся . Это меня устраивает учитывая специфику
>базы, а вот одинаковых слов будет много.
>
>В общем-то задача в том, как ускорить сортировку.

Boolean full-text searches have these characteristics:
They do not automatically sort rows in order of decreasing relevance.

небулен сразу сортирует. если он не устраивает, тогда увы.
>0 явно лишнее.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Сортировка результатов выборки по релевантности"  
Сообщение от Urms email(ok) on 03-Янв-08, 02:23 
Да, ноль лишний. Это так сказать, атавизм, остался после разных экспериментов, забыл его удалить.

Меня не устраивает обычный поиск тем, что для слов, встречающихся чаще, чем в 50% строк будет нулевой вес и такие записи не будут найдены вообще, возможно, этот порог можно изменить?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Сортировка результатов выборки по релевантности"  
Сообщение от sargio (ok) on 03-Янв-08, 19:33 
>Да, ноль лишний. Это так сказать, атавизм, остался после разных экспериментов, забыл
>его удалить.
>
>Меня не устраивает обычный поиск тем, что для слов, встречающихся чаще, чем
>в 50% строк будет нулевой вес и такие записи не будут
>найдены вообще, возможно, этот порог можно изменить?

это понятно.

http://dev.mysql.com/doc/refman/5.0/en/fulltext-fine-tuning....

myisam/ftdefs.h

#define GWS_IN_USE GWS_PROB

заменить на

#define GWS_IN_USE GWS_FREQ
и пересобрать mysql.

хотя они советуют все же использовать IN BOOLEAN вместо перекомпеляции.


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Сортировка результатов выборки по релевантности"  
Сообщение от Urms email(ok) on 03-Янв-08, 19:58 
Это я уже читал. Но булеан не сортирует по релевантности, а делать это другими средствами слишком медленно.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Сортировка результатов выборки по релевантности"  
Сообщение от sargio (ok) on 03-Янв-08, 20:24 
>Это я уже читал. Но булеан не сортирует по релевантности, а делать
>это другими средствами слишком медленно.

Перекомпилировали?


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "Сортировка результатов выборки по релевантности"  
Сообщение от sargio (ok) on 03-Янв-08, 20:34 
>Это я уже читал. Но булеан не сортирует по релевантности, а делать
>это другими средствами слишком медленно.

чудес не бывает, он делает order до limit.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "Сортировка результатов выборки по релевантности"  
Сообщение от Urms email(ok) on 14-Янв-08, 19:00 
>может попробовать отказаться от boolean mode, тогда он сортирует по релевантности?
>придется только настраивать минимальную длину слов, так как по умолчанию она 3
>символа.
>еще есть проблема что если текста мало и слово встречается часто, то
>оно будет причислено к стопслову и будет игнорироваться при поиске.

Кроме этого, не в BOOLOEAN MODE нельзя искать по куску слова, что не подходит совсем.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру