Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Пересечение множеств (Глеб) 06/07/2005 - 11:46:32
      Re: Пересечение множеств (Валентин) 06/07/2005 - 14:58:06

> Original message text:
> From: Глеб - 06/07/2005 - 11:46:32
> Subject:Пересечение множеств
> -----------------
> Здравствуйте!
> Есть следующая структура по поиску информации на сайте: все страницы парсятся - убираются комментарии, тэги и прочее. Потом каждая страница разбивается на слова.
> В БД есть две таблицы: одна со словами и их id, вторая с id слов и id страниц, на которых они встретились.
> таблицы:
> create table words (word_id integer primary key, word varchar 255);
> create table indexes (word_id integer, page_id integer);
>
> Например, сейчас они заполнены так:
> words
> ---------------------
> word | word_id
> ---------------------
> привет | 1
> пока | 2
> понедельник | 3
> суббота | 4
>
> indexes
> -----------------
> word_id | page_id
> -----------------
> 1 | 1
> 1 | 2
> 2 | 2
> 2 | 3
> 3 | 1
> 3 | 3
> 3 | 4
> 4 | 2
> 4 | 4
>
> Вопрос: как выбрать все страницы, на которых встретились нужные слова? Для одного слова все решается просто:
> SELECT DISTINCT indexes.page_id FROM indexes, words WHERE words.word_id LIKE 'слово%' AND words.word_id=indexes.word_id;
>
> А для нескольких слов? Оператор OR возращает объединение - т.е. все страницы, на которых встретилось ХОТЬ ОДНО слово, а надо, чтобы только ВСЕ слова.
> Решение через IN ('слово1', 'слово2') лишает прелести like 'слово%' - так решаются проблемы с окончаниями и прочие радости.
>
> Сейчас работает через INTERSECT. Например, SELECT DISTINCT indexes.page_id FROM indexes, words WHERE words.word_id LIKE 'слово%' AND words.word_id=indexes.word_id INTERSECT SELECT DISTINCT indexes.page_id FROM indexes, words WHERE words.word_id LIKE 'слово2%' AND words.word_id=indexes.word_id;
>
> ПРоблема: скорость выполнения. При 5, 6 и т.д. слов в запросе, время выполнения быстро растет. Нужны доли секунд, а при 5 словах уже приближается к секунде. Подскажите приемлимое решение, пожалуйста!
>


From: Валентин - 06/07/2005 - 14:58:06
Subject:Пересечение множеств
-----------------
Напрашивается действие 2-мя запросами
1) Отбираем id слов, которые должны встречаться во временную табличку
2) Соединяем ее со страницами.


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
22918



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |