Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / FTS для внешних данных / 10 сообщений из 10, страница 1 из 1
06.06.2016, 12:55
    #39251178
HiHunter
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FTS для внешних данных
Добрый день!
На одной машине имеется файловый сервер , на другой - БД postgresql
Есть ли возможность в postgre создавать полнотекстовый индекс для файлов и при этом их физически не хранить, а хранить только ссылку на файл (например путь в файловой системе)?

спасибо!
...
Рейтинг: 0 / 0
06.06.2016, 13:34
    #39251201
Oleg Bartunov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FTS для внешних данных
HiHunterДобрый день!
На одной машине имеется файловый сервер , на другой - БД postgresql
Есть ли возможность в postgre создавать полнотекстовый индекс для файлов и при этом их физически не хранить, а хранить только ссылку на файл (например путь в файловой системе)?

спасибо!

Можно, если знаете как добраться до файлов из постгреса, например, в pl/perl, pl/python.
...
Рейтинг: 0 / 0
06.06.2016, 13:54
    #39251209
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FTS для внешних данных
Oleg BartunovHiHunterДобрый день!
На одной машине имеется файловый сервер , на другой - БД postgresql
Есть ли возможность в postgre создавать полнотекстовый индекс для файлов и при этом их физически не хранить, а хранить только ссылку на файл (например путь в файловой системе)?

спасибо!

Можно, если знаете как добраться до файлов из постгреса, например, в pl/perl, pl/python.

Все равно в базе придется хранить tsvector который по размеру будет не то чтобы сильно меньше исходного текста в файле.
А вот так чтобы FTS GIN индекс построенный по данным вне базы + ссылка на файл в таблице - по моему это невозможно (так чтобы tsvector не хранился в базе вообще).


--
Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
06.06.2016, 13:56
    #39251213
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FTS для внешних данных
HiHunter,

как я неправильно понял -- предлагается что то из :
Код: sql
1.
2.
3.
create or replace function get_body_by_path(path text) returns text as .... /*plperl or ~~ */ ... IMMUTABLE ....

create index on pathes ........((get_body_by_path(path)))


+ reindex or update всякий раз, когда меняете тело файла.


НО с апдейтом при неизменном пути будут проблемы. -- оно ж иммутабно (смайл).

А перегружать IMMUTABLE ф--ю в конкурентной среде -- чтобы отинвалидить кеш значений в пж бабушка не велит (остальные валятся с криками -- ну вот не поделено оно [кеш имутабных] по txid ни разу) -- т.ч. проблем будет по самое нехочу. надо изначально закладываться, что изменение тела файла == изменению пути. тогда проще [не надо перегружать ф--ю]. т.е. куча хенджоба, и, по итогу, ни вправо ни влево ни шагу.
...
Рейтинг: 0 / 0
06.06.2016, 14:03
    #39251218
HiHunter
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FTS для внешних данных
Oleg BartunovМожно, если знаете как добраться до файлов из постгреса, например, в pl/perl, pl/python.
Из постгреса нет такой возможности. Постгес не имеет доступ к файловому серверу. Файл для индексации спускается в БД внешним приложением.


Maxim BogukВсе равно в базе придется хранить tsvector который по размеру будет не то чтобы сильно меньше исходного текста в файле.
А вот так чтобы FTS GIN индекс построенный по данным вне базы + ссылка на файл в таблице - по моему это невозможно (так чтобы tsvector не хранился в базе вообще).


Вот интересно именно второе. т.к. для поиска интересен в основном только факт наличия словоформы. Ранжирование полезно, но можно и без него. А конкретное положение в тексте вообще не нужно.
...
Рейтинг: 0 / 0
06.06.2016, 14:16
    #39251226
HiHunter
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FTS для внешних данных
qwwqHiHunter,

как я неправильно понял -- предлагается что то из :
Код: sql
1.
2.
3.
create or replace function get_body_by_path(path text) returns text as .... /*plperl or ~~ */ ... IMMUTABLE ....

create index on pathes ........((get_body_by_path(path)))


+ reindex or update всякий раз, когда меняете тело файла.


НО с апдейтом при неизменном пути будут проблемы. -- оно ж иммутабно (смайл).

А перегружать IMMUTABLE ф--ю в конкурентной среде -- чтобы отинвалидить кеш значений в пж бабушка не велит (остальные валятся с криками -- ну вот не поделено оно [кеш имутабных] по txid ни разу) -- т.ч. проблем будет по самое нехочу. надо изначально закладываться, что изменение тела файла == изменению пути. тогда проще [не надо перегружать ф--ю]. т.е. куча хенджоба, и, по итогу, ни вправо ни влево ни шагу.

Не совсем.
1. файл неизменен
2. Вообще говоря файла нет(индексируется некая промежуточная форма представления файла, которая вычисляется во внешнем по отношении к БД приложении). Промежуточная форма тоже неизменна.
3. В БД есть таблица со ссылкам на файлы. При обработке файла это внешнее приложение создает в таблице запись со ссылкой на файл. Дополнительно оно может передать и эту промежуточную форму для индексирования.
4. Требуется задействовать полнотекстовый поиск для записи нужных файлов
...
Рейтинг: 0 / 0
06.06.2016, 14:21
    #39251232
HiHunter
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FTS для внешних данных
Первое что приходит в голову, это создать текстовый столбец в таблице для индексирования
Сделать индекс нечувствительным к update
Писать туда файл.
в следующей транзакции делать update этого поля и присваивать NULL
...
Рейтинг: 0 / 0
06.06.2016, 14:43
    #39251253
HiHunter
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FTS для внешних данных
так можно сделать?
...
Рейтинг: 0 / 0
07.06.2016, 18:11
    #39252271
Oleg Bartunov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FTS для внешних данных
HiHunterOleg BartunovМожно, если знаете как добраться до файлов из постгреса, например, в pl/perl, pl/python.
Из постгреса нет такой возможности. Постгес не имеет доступ к файловому серверу. Файл для индексации спускается в БД внешним приложением.


pl/perlU может все.
...
Рейтинг: 0 / 0
07.06.2016, 18:16
    #39252277
Oleg Bartunov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FTS для внешних данных
Maxim BogukOleg Bartunovпропущено...


Можно, если знаете как добраться до файлов из постгреса, например, в pl/perl, pl/python.

Все равно в базе придется хранить tsvector который по размеру будет не то чтобы сильно меньше исходного текста в файле.
А вот так чтобы FTS GIN индекс построенный по данным вне базы + ссылка на файл в таблице - по моему это невозможно (так чтобы tsvector не хранился в базе вообще).


--
Maxim Boguk
www.postgresql-consulting.ru

возможно, надо функциональный индекс использовать. Вот Citus недавно пример привел https://www.citusdata.com/blog/14-marco/410-scalable-real-time-product-search-using-citus
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / FTS для внешних данных / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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