Гость
Форумы / SQLite [игнор отключен] [закрыт для гостей] / SQLite быстрый неполнотекстный поиск с русскими символами / 2 сообщений из 2, страница 1 из 1
05.11.2016, 16:50
    #39341841
Maximus1010101
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQLite быстрый неполнотекстный поиск с русскими символами
Здравствуйте, как в SQLite можно организовать регистронезависимый поиск? Нужно настроить неполнотекстовый поиск, чтобы можно было искать по части слова. Сейчас программа построена на System.Data.SQLite.dll использую оператор Like и переопределенный оператор Lower(), т.к. стандартная функция не умеет работать с русскими символами, получился запрос select * from myTable where Lower(myColumn) Like '%текст%'. Все замечательно работает, но при этом поиск выполняется очень долго и по базе размером в ~ 20-50 тыс. строк поиск может выполняться секунд 5. Наткнулся на статьи в которых пишется про ICU, что для нормального поиска по русским символам нужно использовать библиотеку SQLite со встроенной ICU. На официальном сайте нашел библиотеку Sqlite3.dll но по умолчанию она тоже не поддерживает русский. Нашел кучу библиотек SQLite3.dll с поддержкой русских символов со встроенной ICU, но ни одну не получилось подключить, при попытке обращения к ней приложение виснет. Подскажите как еще можно настроить регистронезависимый поиск с русскими символами на SQLite чтобы сократить время запроса? Или может кто-нибудь поделится собранной рабочей библиотекой с поддержкой ICU?
...
Рейтинг: 0 / 0
15.01.2017, 17:37
    #39385042
amsdev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQLite быстрый неполнотекстный поиск с русскими символами
Вероятно нужно самостоятельно собрать Sqlite + ICU.

Далее, по умолчанию LIKE в sqlite регистронезависимый, чтобы был быстрый поиск нужно создать NOCASE индексы для нужных полей. Тогда поиск будет быстрый, но при этом у меня начинал жестко тормозить ORDER BY правда возможно что это был мой косяк в другом месте. Скажем так, вам стоит протестировать скорость работы ORDER BY с NOCASE индексами. Либо создать и NOCASE и обычный индексы для нужных полей.

Другой враиант собрать sqlite с опцией case_sensitive_like или сделать PRAGMA case_sensitive_like = true - тогда поиск будет быстрым с обычными индексами, но при этом регистрозависимым.
...
Рейтинг: 0 / 0
Форумы / SQLite [игнор отключен] [закрыт для гостей] / SQLite быстрый неполнотекстный поиск с русскими символами / 2 сообщений из 2, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]