![]() |
Модераторы: LSD |
![]() ![]() ![]() |
|
afiskon |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 31.3.2011 Где: Россия, Москва Репутация: нет Всего: 4 |
Помогите, пожалуйста, со следующей задачей.
Есть таблица, содержащая несколько миллионов строк, длина которых колеблется где-то в диапазоне от 1 до 70-и. Нужно быстро находить строки по %подстроке%. В качестве БД можно использовать MySQL или PostgreSQL. В документации к MySQL сказано:
Похоже, это не оптимальный вариант, так что простой индекс не годится. Обнаружил, что в MySQL есть поддержка FULLTEXT индекса:
И вроде они даже работают быстрее LIKE-запросов. Смущает только упоминание морфологии и стоп-слов. Это ведь можно отключить? В PostgreSQL FULLTEXT индексов не нашел. Может, плохо искал? Еще, как вариант, в обоих СУБД можно сделать таблицу, содержащую наши строки, сдвинутые (не цеклически) на 1, 2, 3 и тд символов влево с простым индексом. Такая штука должна быстро решать задачу, но смущает сложность реализации-поддержки. Хотелось бы использовать встроенные средства СУБД. Что посоветуете? |
||||
|
|||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 24 Всего: 538 |
Нужно учитывать, что полнотекстовый поиск не полностью эквивалентен LIKE. Chapter 12. Full Text Search -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
afiskon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 31.3.2011 Где: Россия, Москва Репутация: нет Всего: 4 |
Спасибо за ссылку.
Да, почитал. Поиск по релевантности. Совсем не то. Выходи, единственное решение - дополнительная таблица? Даже в PostgreSQL ничего на мой случай не предусмотрено? |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 24 Всего: 538 |
Там есть IN BOOLEAN MODE, который не учитывает релевантность, а только вхождение слова в индекс. Но я имел в виду, что полнотекстовый поиск ищет только по словам. Т.е. знаки препинание, пробелы и т.д. в индексе отсутствуют. P.S. Как изменить список стоп-слов. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 13 Всего: 454 |
Плохо читал. Читай ещё раз, но ВНИМАТЕЛЬНО. Зависит от режима и модификаторов. Можно сделать полностью эквивалентным. Добавлено через 41 секунду
ааа... это верно. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
afiskon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 31.3.2011 Где: Россия, Москва Репутация: нет Всего: 4 |
Для латиницы, цифр и тире (которое можно заменить на подчеркивание или другой знак) полнотекстовый поиск подойдет? Извините за глупые вопросы, но я действительно не знаток БД.
|
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 13 Всего: 454 |
Ну в принципе на базе триггеров несложно реализовать доп. таблицу таких "повёрнутых" строк... но её размер... и тормоза на операциях изменения данных... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
afiskon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 31.3.2011 Где: Россия, Москва Репутация: нет Всего: 4 |
Данные, к счатью, не изменяются. Но добавляются новые.
Это сообщение отредактировал(а) afiskon - 27.6.2011, 13:57 |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 13 Всего: 454 |
ааа... ну тогда действительно один раз создать индексированную таблицу версий подстрок и быстро искать по индексу. Ну будет у тебя в этой таблице сотня миллионов строк... хотя всё равно получится не сказать что очень быстро.
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
afiskon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 31.3.2011 Где: Россия, Москва Репутация: нет Всего: 4 |
Видимо, нужно тупо экспериментировать. Спасибо за помощь.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Общие вопросы по базам данных" | |
|
Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:
Данный форум не предназначен для:
Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение.
Полезные советы: Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | СУБД, общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |