Полнотекстовый поиск пост-ГРЭС через несколько связанных таблиц

Это может быть очень упрощенным вопросом, таким образом, извинения заранее, но я очень плохо знаком с использованием базы данных.

Я хотел бы сделать, чтобы Пост-ГРЭС выполнила его полнотекстовый поиск через несколько объединяемых таблиц. Вообразите что-то как модель User со связанными моделями UserProfile и UserInfo. Поиск только был бы для Пользователей, но будет включать информацию от UserProfile и UserInfo.

Я - планирование использования индекса джина для поиска. Я неясен, однако, на том, испытываю ли я необходимость в отдельном tsvector столбце в таблице User, чтобы содержать агрегированный tsvectors со всех концов таблиц и установить триггеры, чтобы усовершенствовать его. Или если будет возможно создать индекс без tsvector столбца, то это усовершенствует себя каждый раз, когда любое из соответствующих полей в любой из соответствующих таблиц изменяется. Кроме того, любые подсказки относительно синтаксиса команды для создания всего этого очень ценились бы также.

14
задан William Jones 9 February 2010 в 00:33
поделиться

1 ответ

Нет, это невозможно, как показано на Func < T > , Func < T, TResult > , Func < T1, T2, TResult > и т.д.

-121--4998207-

Если вы не можете настроить сеть и репозитории так, чтобы вы могли дома тянуть с работы и толкать на работу (см. раздел «Как использовать» git push «для синхронизации с хостом, с которого невозможно извлечь?» на странице GitFaq в Git Wiki)И вы также не можете настроить свой собственный «публикующий» репозиторий, используемый вами для обмена данными между работой и домом, взгляните на git bundle , который предназначен для автономного (sneakergy) транспорта.

Возможно, это не прямой ответ на ваш вопрос, но я надеюсь, что это поможет.

-121--4690731-

Ваш лучший ответ, вероятно, будет иметь отдельный столбец вектора в каждой таблице (с индексом, конечно). Если агрегировать данные до общего вектора, это создаст множество обновлений на этом общем векторе при каждом обновлении отдельных векторов.

Для каждой таблицы потребуется один индекс. Затем при запросе, очевидно, нужно несколько предложений WHERE, по одному для каждого поля. Затем PostgreSQL автоматически выяснит, какую комбинацию индексов использовать, чтобы дать вам самые быстрые результаты - вероятно, с помощью растрового сканирования. Это сделает ваши запросы несколько более сложными для записи (так как вам нужно несколько предложений соответствия столбцов), но это сохраняет гибкость для запроса только некоторых полей в тех случаях, когда вы хотите.

Невозможно создать один индекс, отслеживающий несколько таблиц. Для этого необходим отдельный столбец вектора и триггеры в каждой таблице для ее обновления.

8
ответ дан 1 December 2019 в 16:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: