Как включить полнотекстовый поиск в sqlite3 в Windows - PullRequest
0 голосов
/ 23 августа 2011

Я скомпилировал sqlite на Windows 7, используя Visual C ++ 2008 включил FTS4 в файле sqlite3.c следующим образом

#ifndef SQLITE_ENABLE_FTS3
#define SQLITE_ENABLE_FTS3
#define SQLITE_ENABLE_FTS4
#define SQLITE_ENABLE_FTS3_PARENTHESIS
#endif

Отладочная версия работает нормально, но выпускная версия завершается с ошибкой 'нет такого модуля FTS3' при попытке создать таблицу

CREATE VIRTUAL TABLE DOCS USING FTS3(DOC_NAME, DOC)

Что происходит?

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

У меня была такая же проблема в Windows 10. Я попытался скомпилировать общую библиотеку, но получил следующую ошибку:

gcc -Os -shared -I. -DSQLITE_THREADSAFE=0 -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_RTREE -DSQLITE_ENABLE_EXPLAIN_COMMENTS   -DHAVE_USLEEP -DHAVE_READLINE  shell.c sqlite3.c -ldl -lreadline -lncurses  -o sqlite3.dll

C: / msys64 / mingw64 / bin /../lib / gcc / x86_64-w64-mingw32 / 7.3.0 /../../../../ x86_64-w64-mingw32 / bin / ld.exe: не удается найти -ldl

collect2.exe: ошибка: ld вернул 1 состояние выхода

Затем я попытался без -ldl, и это сработало.

gcc -O3 -shared -I. -DSQLITE_THREADSAFE=0 -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_RTREE -DSQLITE_ENABLE_EXPLAIN_COMMENTS   -DHAVE_USLEEP -DHAVE_READLINE  shell.c sqlite3.c -lreadline -lncurses  -o sqlite3.dll
0 голосов
/ 23 августа 2011

С http://www.sqlite.org/fts3.html

секция 2.Компиляция и включение FTS3 и FTS4

При использовании объединенной системы сборки на основе autoconf установка переменной среды CPPFLAGS во время выполнения сценария configure является простым способом установки этих макросов.Например, следующая команда:

CPPFLAGS="-DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS" ./configure <configure options>

где эти опции обычно передаются в скрипт конфигурации, если таковые имеются.

Потому что FTS3и FTS4 являются виртуальными таблицами, параметр времени компиляции SQLITE_ENABLE_FTS3 несовместим с параметром SQLITE_OMIT_VIRTUALTABLE.

Если сборка SQLite не включает модули FTS, то любая попытка подготовить инструкцию SQL для создания таблицы FTS3 или FTS4 или для удаления или доступа к существующей таблице FTS любым способом потерпит неудачу.Возвращаемое сообщение об ошибке будет похоже на «нет такого модуля: ftsN» (где N равно 3 или 4).

Если доступна версия C библиотеки ICU, то FTS также может быть скомпилирован сОпределен макрос препроцессора SQLITE_ENABLE_ICU.Компиляция с этим макросом позволяет токенизатору FTS, который использует библиотеку ICU, разбивать документ на термины (слова), используя соглашения для указанного языка и локали.

-DSQLITE_ENABLE_ICU

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...