Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с query expansion 
:(
    Опции темы
tishaishii
Дата 18.9.2007, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



Что-то не могу понять принцип действия with query expansion
Код
select
  name
from
  price
where
  match(name) against('+магнитола +филипс +AQ' with query expansion)
order by
  match(name) against('+магнитола +филипс +AQ' in boolean mode) asc


Вывод первых строчек:
Код
ЦВЕТОЧНИЦА БЕТОННАЯ ЦВЕТ АССОРТ. ЗАКАЗ ИЗГОТОВЛЕНИЕ
СЕКЦИЯ (ПЛИТА) ЗАБОРНАЯ 0.5х2М АССОРТ. ЗАКАЗ ИЗГОТОВЛЕНИЕ +ДОСТАВКА +МОНТАЖ
БЛОК Д/СТОЛБА НАБОРНОГО Д/ЗАБОРА БЕТОННЫЙ ЦВЕТ АССОРТ. ЗАКАЗ ИЗГОТОВЛЕНИЕ


Вывод последних строчек:
Код
ФУТБОЛКА ДЕТСКАЯ СПОРТИВНАЯ КУПАЛИНКА АССОРТ.
ПОЛЗУНКИ Д/МЛАДЕНЦА (НОВОРОЖДЕННОГО) ТРИКОТАЖНЫЕ КУПАЛИНКА АССОРТ.
ДИСПЕТЧЕРСКАЯ СЛУЖБА ПО ДОСТАВКЕ ЛЕКАРСТВ АПТЕКА 36.6
СПРАВОЧНАЯ Ж/Д ВОКЗАЛА-1


В таблице есть записи со словом "магнитола" или "филипс". Но что это за поиск такой "импирический", "with query expansion"?
PM MAIL ICQ Skype   Вверх
tishaishii
Дата 18.9.2007, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



Вот ещё:
Код
select
  name,
  match(`name`) against('+магнитофон+филипс' with query expansion)
from
  price
where
  (
    match(`name`) against('+магнитофон+филипс' with query expansion)
 )>(select sqrt(2*max(match(`name`) against('+магнитофон+филипс' with query expansion))) from price)
order by
  match(`name`) against('+магнитофон+филипс' in boolean mode) desc,
  match(`name`) against('+магнитофон+филипс' with query expansion) desc

В первых рядах выдаёт:
Код
'МАГНИТОФОН (ДЕКА) ДИСКОВ CD СОНИ (SONY) ХАЙ ФАЙ (HI-FI) АССОРТ.', 174.18516540527

PM MAIL ICQ Skype   Вверх
yar
Дата 18.9.2007, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 8.9.2007
Где: Одесса, Украина

Репутация: нет
Всего: 8



С "with query expansion" поиск ищет два раза. Первый раз по оригинальной строке. Затем он берёт оригинальную строку поиска, добавляет к ней наиболее значимые слова или фразы из результатов первого поиска и снова производит поиск. Подробнее описано тут
--------------------
Если бы строители возводили здания так, как программисты пишут программы, первый же дятел уничтожил бы мировую цивилизацию.Джеральд Вайнберг
PM MAIL WWW   Вверх
tishaishii
Дата 25.9.2007, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



А кто такие "наиболее значимые слова"?
И, если у match..expansion есть вывод - число с плавающей точкой, то, скорее всего, чем оно ближе к нулю - тем выше соответствие или чем оно дальше от нуля. Я сортировал и ASC и DESC результаты поиска. В запросе я пытался найти "магнитофон филлипс", ну хотя бы просто "филлипс" нашёл бы, а то нашёл "МАГНИТОФОН (ДЕКА) ДИСКОВ CD СОНИ (SONY) ХАЙ ФАЙ (HI-FI) АССОРТ.", хотя "магнитофон филлипс" есть в базе. Как его понять-то, как он числа эти, веса, раздаёт?

Добавлено через 8 минут и 31 секунду
Вот я выполнил такой запрос:
Код

select
  name,
  match(`name`) against('+вязальная+машинка' with query expansion)
from
  price
where
  (
    match(`name`) against('+вязальная+машинка' with query expansion)
  )>(select
        (
            select
                sqrt(sqrt(count(*)))
            from
                price
            where
                match(`name`) against('+вязальная+машинка' in boolean mode) or
                (match(`name`) against('вязальная*машинка' with query expansion))
        )*sqrt(sqrt(max(match(`name`) against('+вязальная+машинка' with query expansion)))
) from price) or (
    match(`name`) against('вязальная*машинка' with query expansion)
  )>(select
        (
            select
                sqrt(sqrt(count(*)))
            from
                price
            where
                match(`name`) against('+вязальная+машинка' in boolean mode) or
                (match(`name`) against('вязальная*машинка' with query expansion))
        )*sqrt(sqrt(max(match(`name`) against('+вязальная+машинка' with query expansion)))
) from price)
order by
  (match(`name`) against('+вязальная+машинка' in boolean mode)) desc,
  (match(`name`) against('вязальная машинка' in boolean mode)) desc,
  (match(`name`) against('вязальная*машинка' in boolean mode)) desc,
  (match(`name`) against('+вязальная+машинка' with query expansion)) desc


Получил результат:
Код

МАШИНА ВЯЗАЛЬНАЯ СИЛЬВЕР SK-830/FRP-70 КОМПЬЮТЕРНАЯ 2-ФОНТУРНАЯ (ДВУХФОНТУРНАЯ) 7 КЛАСС КРЕДИТ (442.81564331055)
МАШИНА ВЯЗАЛЬНАЯ СИЛЬВЕР SK-160 1-ФОНТУРНАЯ (ОДНОФОНТУРНАЯ) 4 КЛАСС (428.0588684082)
МАШИНА ВЯЗАЛЬНАЯ СИЛЬВЕР LK-150 1-ФОНТУРНАЯ (ОДНОФОНТУРНАЯ) 4 КЛАСС КРЕДИТ (397.10360717773)
ПРОВОЛОКА ВЯЗАЛЬНАЯ СТАЛЬНАЯ 1.2-6ММ ТЕРМИЧЕСКИ ОБРАБОТАННАЯ АССОРТ. (279.79635620117)
ПРОВОЛОКА ВЯЗАЛЬНАЯ СТАЛЬНАЯ 1.2-6ММ ТЕРМИЧЕСКИ ОБРАБОТАННАЯ АССОРТ. (279.79635620117)
ПРОВОЛОКА ВЯЗАЛЬНАЯ ОЦИНК. 1.2-6ММ ТЕРМИЧЕСКИ ОБРАБОТАННАЯ АССОРТ. (275.24676513672)
ПРОВОЛОКА ВЯЗАЛЬНАЯ ОЦИНК. 1.2-6ММ ТЕРМИЧЕСКИ ОБРАБОТАННАЯ АССОРТ. (275.24676513672)
МАШИНА ВЯЗАЛЬНАЯ СИЛЬВЕР 5 КЛАСС АССОРТ. ЗАКАЗ (270.59436035156)
ПРОВОЛОКА ВЯЗАЛЬНАЯ ОЦИНК. 1.4-6ММ ТЕРМИЧЕСКИ ОБРАБОТАННАЯ АССОРТ. (269.81463623047)


Сперва он правильно выдаёт "машина вязальная", потом перерыв на рекламу проволоки, а потом снова встречается "машина вязальная". Почему "проволока" обогнала "машину вязальную"?

Добавлено через 11 минут и 27 секунд
К стати, потом небольшими кучками сквозь завалы проволоки попадаются и машинки.
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0494 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.