25.09.2010, 12:40 | #1 |
Эксперт
Регистрация: 05.03.2008
Сообщений: 1,095
Вес репутации: 249
|
Проблема с индексным поиском по документам
Разработан индексный поиск по сайту. Морфология с лемами, лексемами и парадигмами, также расчет релевантности уже реализованы. В общем все работает и используется.
Но при большом количестве документов возникают проблемы с производительностью. Проблема №1: Имеется таблица соответствий "слово-документ", с двумя полями "word_id" и "document_id". По этой таблице можно определить какие слова в каких документах находятся. Оба с поля индексированные, поэтому можно мгновенно по слову получить список документов, в которых это слово содержится. Но что делать с поисковой фразой из нескольких слов? Как сделать БЫСТРУЮ выборку документов, в которых содержатся одновременно все слова из искомой фразы? Подчеркну: выборка должна работать быстро (доли секунды) при очень большом количестве строк в таблице (десятки-сотни миллионов). Понимаю, что задача непростая, но мож быть кто-нибудь знает возможные пути решения? |
25.09.2010, 13:00 | #2 |
Специалист
Регистрация: 16.03.2008
Сообщений: 127
Вес репутации: 0
|
Группировать документы имеющие эти несколько слов
__________________
|
25.09.2010, 13:19 | #4 |
Починяю примуса
Регистрация: 26.09.2008
Сообщений: 1,505
Вес репутации: 285
|
Я бы попробовал по тойже схеме: "фраза -документ"
Поработал бы над вариантами кеширования (например, кешировать запрос-ответ, все лучше чем множественные сканирования строк) Попробовал бы уменьшить кол-во строк(даже в ущерб полноты поиска) ...
__________________
|
25.09.2010, 13:38 | #5 |
Специалист
Регистрация: 16.03.2008
Сообщений: 127
Вес репутации: 0
|
Atomic, Как быть с предложениями и если искомые слова находятся в разных местах документа?
__________________
|
25.09.2010, 14:01 | #6 |
Добрый модератор
Регистрация: 09.07.2007
Адрес: глобус Украины
Сообщений: 27,600
Вес репутации: 1025
|
СУБД какая?
__________________
Правильный хостинг. В личке бесплатно не отвечаю обычно. |
25.09.2010, 14:12 | #7 |
Эксперт
Регистрация: 05.03.2008
Сообщений: 1,095
Вес репутации: 249
|
zhegloff,
Субд пока mysql5, но это не принципиально - в перспективе может быть любая. yayayagogogo С группировкой решение придумал: выборку документов, содержащих любое слово из фразы, буду группировать по полю word_id, ведя подсчет count(document_id) и выбирая только те записи, где count(document_id) равен количеству слов в фразе. Позже сравню этот вариант с другими. |
25.09.2010, 14:39 | #8 |
Специалист
Регистрация: 16.03.2008
Сообщений: 127
Вес репутации: 0
|
Какие есть другие варианты? То же хочется сравнить
__________________
|
25.09.2010, 15:01 | #9 | |
Эксперт
Регистрация: 05.03.2008
Сообщений: 1,095
Вес репутации: 249
|
yayayagogogo,
Цитата:
Можно по очереди делать запросы для каждого слова, а потом делать пересечение выборки. В этом случае желательно учитывать частотность слов. На первый взгляд, это не лучший способ, но если не требуется полная "полнота" выборки, то появляются некоторые полезные возможности предварительного упорядочивания по некоторым статичным критериям. |
|
25.09.2010, 15:16 | #10 |
Специалист
Регистрация: 16.03.2008
Сообщений: 127
Вес репутации: 0
|
Например из выборки по одному слову делается еще один SELECT в котором проверяется наличие другого слова по выборке прошлого слова?
Дайте пожалуйста SQL так понятнее будет
__________________
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Проблема с поиском ссылок по тематике 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.