- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Есть 100М самых разнообразных фраз. Длина фразы до 10 слов, есть куча дополнительных столбцов типа integer. Нужно искать все фразы, содержащие одно, два или три слова. Иногда в запросе будет упоминаться значение одного из полей типа integer. Количество поисков будет очень большим, повторяющиеся запросы редки. Требуется максимизировать скорость выборки данных. Что посоветуете?
P.S. Пока хочу сделать так: загнать всё в Mysql и сделать доп. таблицу слово-номер_фразы. Или загнать в mysql и делать LIKE.
Загнать в MySQL версии не меньше 4.1.16 (не спрашивайте почему, начну ругаться матом) и построить full text индекс. На 100 мб и большом количестве ОЗУ (скажем 512 мб памяти) будет однозначно летать. Не забудьте перед постройкой индекса выставить в my.cnf параметры
ft_min_word_len=1
ft_stopword_file=
Не знаю, насколько адекватно работает full text в mysql 5.x
Есть 100М самых разнообразных фраз. Длина фразы до 10 слов, есть куча дополнительных столбцов типа integer. Нужно искать все фразы, содержащие одно, два или три слова. Иногда в запросе будет упоминаться значение одного из полей типа integer. Количество поисков будет очень большим, повторяющиеся запросы редки. Требуется максимизировать скорость выборки данных. Что посоветуете?
P.S. Пока хочу сделать так: загнать всё в Mysql и сделать доп. таблицу слово-номер_фразы. Или загнать в mysql и делать LIKE.
Не знаю, насколько адекватно работает full text в mysql 5.x
У меня отъедает память на треть и кладёт mysql сервер. Mysql 5 и Freebsd 6
сделать инвертированный список?
построить на основе этой базы вторую, в которой 3 поля: слово, его позиция в первой таблице, и поле "типа integer". Делается выборка выриантов с новой базы, а затем их обработка.
Вобще то full_text должен отлично работать, может просто ft_min_word_len=1 здесь не уместно?
Да нет, просто там векторная модель, а она тормозит на больших объемах.
построить на основе этой базы вторую, в которой 3 поля: слово, его позиция в первой таблице, и поле "типа integer". Делается выборка выриантов с новой базы, а затем их обработка.
Вобще то full_text должен отлично работать, может просто ft_min_word_len=1 здесь не уместно?
как вариант - Postresql + RD-tree индекс на множествах признаков
как вариант - Postresql + RD-tree индекс на множествах признаков
Дело в том, что RD-дерево в данном случае - это тоже векторная модель, но вектора проиндексированы. В связи с этим возникает два нюанса, разрешение которых требует для каждого найденного документа считывать текст: false positives и ранжирование. Собственно, это самое большое зло, потому что требует множества random disk accesses. Да и сами объемы чтения могут быть большими.
С инвертированными файлами такой проблемы не возникает: нет false positives, ранжирование осуществляется a priori, то есть до формирования сниппетов, а сниппеты нужно формировать только для небольшого количества документов.