Member 12561704 Ответов: 1

СУБД SQLite + .Net версии 4.0. Как быстро выполнить поиск без учета регистра не только латинские символы


Здравствуйте, как я могу организовать нечувствительный поиск с помощью SQLite? Необходимо настроить неполнотекстовый поиск, чтобы я мог искать части слов. Теперь программа основана на System.Data.SQLite.dll. Он использует оператор Like и переопределение оператора Lower (), поскольку стандартная функция не может работать с нелатинскими символами, получил запрос «выберите * из myTable, где Lower (myColumn) Like% text%». Работает нормально, но поиск занимает много времени и на основе примерно 20-50 тысяч строк можно искать 5 секунд. Подскажите, как еще можно настроить поиск без учета регистра на SQLite, чтобы сократить время запроса? А может кто поделится собранной рабочей библиотекой с поддержкой ICU?

Что я уже пробовал:

Я нахожу статью, которая написана о ICU, мне нужно использовать библиотеку SQLite для поиска обычных символов non_latin для поиска встроенных ICU. На официальном сайте я нашел дефолт Sqlite3.dll библиотека, но она также не поддерживает нелатинские символы. Я нашел кучу SQLite3.dll библиотеки с поддержкой его с помощью встроенного ICU, но никто не смог подключиться, при попытке доступа к нему зависает приложение.

1 Ответов

Рейтинг:
1

Midi_Mick

В вашем случае я бы предложил создать индекс без учета регистра в поле поиска, а затем заставить select использовать этот индекс в своем поиске.

CREATE INDEX iCaseInsensitive ON myTable(myColumn COLLATE NOCASE);
...
SELECT * FROM myTable INDEXED BY iCaseInsensitive WHERE myColumn <expr>;

Обратите внимание, что в этой системе, если вы ставите условия для других столбцов, вам придется либо добавить эти столбцы в индекс, либо использовать соединение.
Еще одна возможность, о которой я только что подумал, если COLLATE NOCASE не работает с вашим набором символов, создайте индекс из столбца, уже преобразованного в нижний регистр
CREATE INDEX iCaseInsensitive ON myTable(Lower(myColumn));