Вернуться   Форум SAPE.RU > Общие вопросы > Разработка и сопровождение сайтов

-->
Ответ
 
Опции темы
Старый 25.09.2010, 12:40   #1
Эксперт
 
Регистрация: 05.03.2008
Сообщений: 1,095
Вес репутации: 249
boric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущее
По умолчанию Проблема с индексным поиском по документам

Разработан индексный поиск по сайту. Морфология с лемами, лексемами и парадигмами, также расчет релевантности уже реализованы. В общем все работает и используется.

Но при большом количестве документов возникают проблемы с производительностью.

Проблема №1:

Имеется таблица соответствий "слово-документ", с двумя полями "word_id" и "document_id". По этой таблице можно определить какие слова в каких документах находятся. Оба с поля индексированные, поэтому можно мгновенно по слову получить список документов, в которых это слово содержится.

Но что делать с поисковой фразой из нескольких слов? Как сделать БЫСТРУЮ выборку документов, в которых содержатся одновременно все слова из искомой фразы?

Подчеркну: выборка должна работать быстро (доли секунды) при очень большом количестве строк в таблице (десятки-сотни миллионов).

Понимаю, что задача непростая, но мож быть кто-нибудь знает возможные пути решения?
boric вне форума   Ответить с цитированием
Старый 25.09.2010, 13:00   #2
Специалист
 
Регистрация: 16.03.2008
Сообщений: 127
Вес репутации: 0
yayayagogogo не любят в этих краяхyayayagogogo не любят в этих краях
По умолчанию

Группировать документы имеющие эти несколько слов
__________________
http://gun.su/referer/Бесплатные посетители на Ваши сайты!
yayayagogogo вне форума   Ответить с цитированием
Старый 25.09.2010, 13:05   #3
Эксперт
 
Регистрация: 05.03.2008
Сообщений: 1,095
Вес репутации: 249
boric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущее
По умолчанию

yayayagogogo
Цитата:
Группировать документы имеющие эти несколько слов
Имеете ввиду группировку sql-запросе? Щас посмотрю этот вариант по производительности и сравню со своими другими решениями.
boric вне форума   Ответить с цитированием
Старый 25.09.2010, 13:19   #4
Починяю примуса
 
Аватар для Atomic
 
Регистрация: 26.09.2008
Сообщений: 1,505
Вес репутации: 285
Atomic - прекрасное будущееAtomic - прекрасное будущееAtomic - прекрасное будущееAtomic - прекрасное будущееAtomic - прекрасное будущееAtomic - прекрасное будущееAtomic - прекрасное будущееAtomic - прекрасное будущееAtomic - прекрасное будущееAtomic - прекрасное будущееAtomic - прекрасное будущее
По умолчанию

Я бы попробовал по тойже схеме: "фраза -документ"
Поработал бы над вариантами кеширования (например, кешировать запрос-ответ, все лучше чем множественные сканирования строк)
Попробовал бы уменьшить кол-во строк(даже в ущерб полноты поиска)
...
__________________
Починяю разнокалиберные примуса здесь.
Atomic вне форума   Ответить с цитированием
Старый 25.09.2010, 13:38   #5
Специалист
 
Регистрация: 16.03.2008
Сообщений: 127
Вес репутации: 0
yayayagogogo не любят в этих краяхyayayagogogo не любят в этих краях
По умолчанию

Atomic, Как быть с предложениями и если искомые слова находятся в разных местах документа?
__________________
http://gun.su/referer/Бесплатные посетители на Ваши сайты!
yayayagogogo вне форума   Ответить с цитированием
Старый 25.09.2010, 14:01   #6
Добрый модератор
 
Аватар для zhegloff
 
Регистрация: 09.07.2007
Адрес: глобус Украины
Сообщений: 27,600
Вес репутации: 1025
zhegloff - прекрасное будущееzhegloff - прекрасное будущееzhegloff - прекрасное будущееzhegloff - прекрасное будущееzhegloff - прекрасное будущееzhegloff - прекрасное будущееzhegloff - прекрасное будущееzhegloff - прекрасное будущееzhegloff - прекрасное будущееzhegloff - прекрасное будущееzhegloff - прекрасное будущее
По умолчанию

СУБД какая?
__________________
Установка кода сапы от $9.95. Пишите в личку.
Правильный хостинг.
В личке бесплатно не отвечаю обычно.
zhegloff вне форума   Ответить с цитированием
Старый 25.09.2010, 14:12   #7
Эксперт
 
Регистрация: 05.03.2008
Сообщений: 1,095
Вес репутации: 249
boric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущее
По умолчанию

zhegloff,
Субд пока mysql5, но это не принципиально - в перспективе может быть любая.


yayayagogogo
С группировкой решение придумал: выборку документов, содержащих любое слово из фразы, буду группировать по полю word_id, ведя подсчет count(document_id) и выбирая только те записи, где count(document_id) равен количеству слов в фразе.
Позже сравню этот вариант с другими.
boric вне форума   Ответить с цитированием
Старый 25.09.2010, 14:39   #8
Специалист
 
Регистрация: 16.03.2008
Сообщений: 127
Вес репутации: 0
yayayagogogo не любят в этих краяхyayayagogogo не любят в этих краях
По умолчанию

Какие есть другие варианты? То же хочется сравнить
__________________
http://gun.su/referer/Бесплатные посетители на Ваши сайты!
yayayagogogo вне форума   Ответить с цитированием
Старый 25.09.2010, 15:01   #9
Эксперт
 
Регистрация: 05.03.2008
Сообщений: 1,095
Вес репутации: 249
boric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущее
По умолчанию

yayayagogogo,
Цитата:
Какие есть другие варианты? То же хочется сравнить
Например, через сравнение этой таблицы самой с собой по каждому слову из запроса, но этот вариант на фразах с количеством слов больше 5-6 тормозит по экспоненте, хотя на коротких фразах, пожалуй, самый быстрый.

Можно по очереди делать запросы для каждого слова, а потом делать пересечение выборки. В этом случае желательно учитывать частотность слов. На первый взгляд, это не лучший способ, но если не требуется полная "полнота" выборки, то появляются некоторые полезные возможности предварительного упорядочивания по некоторым статичным критериям.
boric вне форума   Ответить с цитированием
Старый 25.09.2010, 15:16   #10
Специалист
 
Регистрация: 16.03.2008
Сообщений: 127
Вес репутации: 0
yayayagogogo не любят в этих краяхyayayagogogo не любят в этих краях
По умолчанию

Цитата:
Сообщение от boric Посмотреть сообщение
через сравнение этой таблицы самой с собой по каждому слову из запроса
Например из выборки по одному слову делается еще один SELECT в котором проверяется наличие другого слова по выборке прошлого слова?

Дайте пожалуйста SQL так понятнее будет
__________________
http://gun.su/referer/Бесплатные посетители на Ваши сайты!
yayayagogogo вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с поиском ссылок по тематике YACA iq2003 Ошибки при работе с системой 9 17.03.2010 20:16
проблема с поиском моего сайта жорик Вопросы по работе системы 8 08.09.2009 12:20
Проблема с поиском ngf41 Вопросы по работе системы 4 23.08.2009 18:02
FAQ по отчетным документам Petrovich FAQ 0 25.11.2008 17:39
Проблема с поиском в яндексе FlaBla Вопросы от новичков 4 27.06.2008 18:46


Часовой пояс GMT +3, время: 18:44.