powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / SQLite [игнор отключен] [закрыт для гостей] / SQLITE полнотекстовый поиск
14 сообщений из 14, страница 1 из 1
SQLITE полнотекстовый поиск
    #35004379
Dignat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Использую sqlite.dll для полнотекстового поиска в windows.
В интернете много информации как создать виртуальные таблицы с использованием модулей FTS1, FTS2, FTS3 .
Код: plaintext
1.
create virtual table doc using fts3(words);
Чтоб использовать эти модули их нужно сначала инициализировать. А как это сделать я не знаю.
В исходниках есть функция sqlite3Fts2Init() , но она не вынесена на верх.

Помогите решить эту проблему.
...
Рейтинг: 0 / 0
SQLITE полнотекстовый поиск
    #35180333
ythgt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Посмотри здесь здесь
...
Рейтинг: 0 / 0
SQLITE полнотекстовый поиск
    #35180334
Alexbootch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предварительно нужно скачать fts2dll-3_3_13.zip (или более новую версию) и установить в папку с программой fts1.dll и fts2.dll
Далее:
Создаём тестовую таблицу:
CREATE VIRTUAL TABLE test USING fts3(name);
Записываем какие-либо тестовые данные:
INSERT INTO test VALUES ('Новое сообщение в форум "Другие СУБД"');
INSERT INTO test VALUES ('fts1 может быть построено как и автономная коллективная библиотека, или статически связанная в библиотеку SQLite');
Теперь тестируем:
SELECT name FROM test WHERE name MATCH 'может автономная библиотеку';
-->fts1 может быть построено как и автономная коллективная библиотека, или статически связанная в библиотеку SQLite


SELECT name FROM test WHERE name MATCH 'мож* автономн* библиот*';
-->fts1 может быть построено как и автономная коллективная библиотека, или статически связанная в библиотеку SQLite

и т.д.
...
Рейтинг: 0 / 0
SQLITE полнотекстовый поиск
    #35180341
Alexbootch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexbootchПредварительно нужно скачать fts2dll-3_3_13.zip (или более новую версию) и установить в папку с программой fts1.dll и fts2.dll
Далее:
Создаём тестовую таблицу:
CREATE VIRTUAL TABLE test USING fts3(name);
Записываем какие-либо тестовые данные:
INSERT INTO test VALUES ('Новое сообщение в форум "Другие СУБД"');
INSERT INTO test VALUES ('fts1 может быть построено как и автономная коллективная библиотека, или статически связанная в библиотеку SQLite');
Теперь тестируем:
SELECT name FROM test WHERE name MATCH 'может автономная библиотеку';
-->fts1 может быть построено как и автономная коллективная библиотека, или статически связанная в библиотеку SQLite


SELECT name FROM test WHERE name MATCH 'мож* автономн* библиот*';
-->fts1 может быть построено как и автономная коллективная библиотека, или статически связанная в библиотеку SQLite

и т.д.

Извиняюсь, но скачать нужно только новую библиотеку SQLite 3.5.6 (fts2dll-3_3_13.zip), т.к. fts3 уже в нее встроен.
...
Рейтинг: 0 / 0
SQLITE полнотекстовый поиск
    #35180342
Alexbootch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexbootch AlexbootchПредварительно нужно скачать fts2dll-3_3_13.zip (или более новую версию) и установить в папку с программой fts1.dll и fts2.dll
Далее:
Создаём тестовую таблицу:
CREATE VIRTUAL TABLE test USING fts3(name);
Записываем какие-либо тестовые данные:
INSERT INTO test VALUES ('Новое сообщение в форум "Другие СУБД"');
INSERT INTO test VALUES ('fts1 может быть построено как и автономная коллективная библиотека, или статически связанная в библиотеку SQLite');
Теперь тестируем:
SELECT name FROM test WHERE name MATCH 'может автономная библиотеку';
-->fts1 может быть построено как и автономная коллективная библиотека, или статически связанная в библиотеку SQLite


SELECT name FROM test WHERE name MATCH 'мож* автономн* библиот*';
-->fts1 может быть построено как и автономная коллективная библиотека, или статически связанная в библиотеку SQLite

и т.д.

Извиняюсь, но скачать нужно только новую библиотеку SQLite 3.5.6 (fts2dll-3_3_13.zip качать не нужно), т.к. fts3 уже в нее встроен.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
SQLITE полнотекстовый поиск
    #35987531
kolio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
странная проблема с этим fts
создал таблицу
Код: plaintext
1.
CREATE VIRTUAL TABLE TEXT_DEC USING fts3(NUMDEC, UA);
добавляю в таблицу запись. в поле UA 20 КБ текста впиндюриваю

но при запросе
Код: plaintext
select * from text_dec;
вычитывает только 255 символов из поля UA
решил, что не добавилась запись, но посмотрев файл - увидел весь документ. странно

использую Delphi компонент ASQLite3 и отдельно менеджер базы SQLite Maestro. оба не хотят отдавать мне это поле в полном обьеме

помогите плиз
...
Рейтинг: 0 / 0
SQLITE полнотекстовый поиск
    #35987587
kolio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
но если использовать стандартный sqlite3.exe то при таком запросе данные выдаются в полном обьеме на экран

наверное компоненты и программа тупят
...
Рейтинг: 0 / 0
SQLITE полнотекстовый поиск
    #35987912
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поробуй создать указав типы колонок, например:
Код: plaintext
CREATE VIRTUAL TABLE TEXT_DEC USING fts3(NUMDEC number, UA text);
...
Рейтинг: 0 / 0
SQLITE полнотекстовый поиск
    #35996454
kolio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проблема была в компонентах

дело в том, что в полнотекстовом поиске sqlite3.dll возвращает пустой тип поля
и компоненты по умолчанию ставили, что это string[255] и оно обрезало соответственно данные
подправил на text и всё как часики работает
...
Рейтинг: 0 / 0
SQLITE полнотекстовый поиск
    #35996470
kolio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
подскажите плиз кто в этом знает больше

можно ли как-то настроить индексатор FTS,чтобы он не индексировал HTML ?
либо может как-то задать список исключаемых слов, чтобы не индексировало?

заливаю в поле html странички. и оно индексирует не только сам текст, но и HTML теги :(
они ненужны ни капли эти индексы тегов
...
Рейтинг: 0 / 0
SQLITE полнотекстовый поиск
    #35997567
Фотография BION
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolioподскажите плиз кто в этом знает больше

можно ли как-то настроить индексатор FTS,чтобы он не индексировал HTML ?
либо может как-то задать список исключаемых слов, чтобы не индексировало?

заливаю в поле html странички. и оно индексирует не только сам текст, но и HTML теги :(
они ненужны ни капли эти индексы тегов

Значит перед заливом в БД, нужно парсить HTML и отсекать тэги и скрипты, оставляя только текст. Именно так и работают поисковые машины. Регулярные выражения вам помогут в этом.
...
Рейтинг: 0 / 0
SQLITE полнотекстовый поиск
    #35997639
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
kolioподскажите плиз кто в этом знает больше

можно ли как-то настроить индексатор FTS,чтобы он не индексировал HTML ?
либо может как-то задать список исключаемых слов, чтобы не индексировало?

заливаю в поле html странички. и оно индексирует не только сам текст, но и HTML теги :(
они ненужны ни капли эти индексы тегов

Этот вопрос постоянно повторяют в рассылке SQLite. Ответ простой - следует написать нужный токенайзер, который будет игнорировать html-тэги. Смотрите исходники модуля fts3, там есть примеры и комментарии.
...
Рейтинг: 0 / 0
SQLITE полнотекстовый поиск
    #35998630
kolio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MBG
Этот вопрос постоянно повторяют в рассылке SQLite. Ответ простой - следует написать нужный токенайзер, который будет игнорировать html-тэги. Смотрите исходники модуля fts3, там есть примеры и комментарии.

понял. спасиб
я так понимаю это будет dll файлик, который подключить потом и будет счастье :)
вроде всё верно понял

Код: plaintext
CREATE VIRTUAL TABLE thai_text USING fts3(text, tokenizer icu th_TH)
...
Рейтинг: 0 / 0
SQLITE полнотекстовый поиск
    #35999570
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
kolioMBG
Этот вопрос постоянно повторяют в рассылке SQLite. Ответ простой - следует написать нужный токенайзер, который будет игнорировать html-тэги. Смотрите исходники модуля fts3, там есть примеры и комментарии.

понял. спасиб
я так понимаю это будет dll файлик, который подключить потом и будет счастье :)
вроде всё верно понял

Код: plaintext
CREATE VIRTUAL TABLE thai_text USING fts3(text, tokenizer icu th_TH)


Да, нужно сделать токенайзер и подключить. В свое время я разбирался с этим вопросом, оказалось, что если браться, то нужно делать поддержку юникода плюс стеммер и морфологический поиск. Сам токенайзер лишь разбивает текст на лексемы, а вот для поиска по словоформам, а тем более для нечеткого поиска еще многое сделать нужно. В итоге поддержку юникода я в свою сборку SQLite добавил, а за остальное не стал браться (libICU мне не подходит, т.к. в несколько раз снижает быстродействие системы, а на моих базах в гигабайты и десятки гигабайт это критично). Можете в репозитории эту сборку взять

http://mobigroup.ru/page/debian

По умолчанию включен unaccent, т.е. при поиске и сортировке буквы ё==е и й==и, таким образом решается проблема различия в написании слов. Стеммер можно реализовать двумя способами - как функцию преобразования словоформы к базовой форме, или как таблицу возможных словоформ. Существуют скрипты, которые создают словари на основе правил ispell и пр. Я рассматривал именно такой вариант, т.к. он позволяет использовать сразу несколько словарей, в то время как использование нескольких последовательных стеммеров может привести к ошибкам и существенно повлиять на быстродействие. Что касается устойчивого к ошибкам написания поиска, можно использовать хэш soundex или триграммы. Алгоритм soundex в SQLite уже реализован, следует лишь активировать его поддержку при сборке. На практике soundex весьма эффективен для транслитерированных русских слов.

Можете посмотреть дискуссию с разработчиками FTS, как раз здесь я про стеммеры, морфологию и нечеткий поиск спрашивал:
http://www.nabble.com/FTS-statistics-and-stemming-td18298526.html

Так и не добрался посмотреть, как в PostgreSQL сделан полнотекстовый поиск, может быть, имеет смысл его портировать, если он достаточно эффективен (замечу, что для SQLite-ориентированного решения требования по быстродействию минимум на порядок выше, чем для клиент-серверных СУБД).

Существуют и открытые системы морфологического поиска для русского языка, но с ними я не разбирался. Ссылки сейчас не назову, но мне их подсказали с полгода-год назад в рассылке debian-russian, можете поискать в архивах.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / SQLITE полнотекстовый поиск
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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