Я хотел бы реализовать полнотекстовый поиск в своем приложении, но я сталкиваюсь с некоторыми блокпостами, связанными с моими столбцами типа Array. Как реализовать триггер psql, чтобы при обновлении моей таблицы «объектов» каждый элемент (который является строками) столбца массива добавлен в столбец tsvector моей таблицы «поиска»?PostgreSQL полнотекстовый поиск с массивами
0
A
ответ
0
В Postgres 9.6 array_to_tsvector was added.
Если вы имеете дело с одной и той же таблицей, вы можете написать что-то вроде этого.
CREATE FUNCTION tsv_trigger() RETURNS trigger AS $$
begin
IF (TG_OP = 'INSERT') OR old.array_column <> new.array_column THEN
new.tsv := array_to_tsvector(new.array_column);
END IF;
return new;
end
$$ LANGUAGE plpgsql;
CREATE TRIGGER tsvectorupdate BEFORE INSERT OR UPDATE
ON my_table FOR EACH ROW EXECUTE PROCEDURE tsv_trigger();
Если вы имеете дело с двумя таблицами, чем вам нужно написать обновить
CREATE FUNCTION cross_tables_tsv_trigger() RETURNS trigger AS $$
begin
IF (TG_OP = 'INSERT') OR old.array_column <> new.array_column THEN
UPDATE search_table st
SET tsv = array_to_tsvector(new.array_column)
WHERE st.id = new.searchable_record_id
END IF;
# you can't return NULL because you'll break the chain
return new;
end
$$ LANGUAGE plpgsql;
Обратите внимание, что она будет отличаться от умолчанию to_tsvector (array_to_string)() комбинации.
Он не содержит номера позиций и нормализации нижнего регистра, поэтому вы можете получить неожиданные результаты.
Смежные вопросы
- 1. Postgresql полнотекстовый поиск tokenizer
- 2. Полнотекстовый поиск по PostgreSQL
- 3. PostgreSQL. Полнотекстовый поиск
- 4. postgresql полнотекстовый поиск функции синтаксиса
- 5. Полнотекстовый поиск PostgreSQL и MySQL
- 6. Postgresql полнотекстовый поиск с другими условиями
- 7. postgresql. полнотекстовый поиск запросов с опечатками
- 8. Полнотекстовый поиск с Sails.js
- 9. Postgresql Полнотекстовый поиск: Странное поведение и оператор
- 10. Полнотекстовый поиск со связанными таблицами в PostgreSQL
- 11. PostgreSQL: Полнотекстовый поиск - как искать частичные слова?
- 12. Добавить новый язык в postgresql полнотекстовый поиск
- 13. Полнотекстовый поиск с Postgres
- 14. Postgresql полнотекстовый поиск слов с несколькими конкретными символами
- 15. Полнотекстовый поиск Rails 3
- 16. Django полнотекстовый поиск с MySQL InnoDB
- 17. Полнотекстовый поиск с использованием Mongoid
- 18. Сортировка с MongoDB полнотекстовый поиск
- 19. Полнотекстовый персонализированный поиск с Mahout
- 20. Полнотекстовый поиск с подстановочным знаком
- 21. Полнотекстовый поиск с ndb endpoints_proto_datastore
- 22. Полнотекстовый поиск с Amazon Services
- 23. Полнотекстовый поиск с использованием solandra
- 24. Postgresql полнотекстовый поиск по действительно коротким документам (имя файла)
- 25. Как предотвратить полнотекстовый поиск парсера PostgreSQL, переписывая символы в пробелы?
- 26. JPA поиск с массивами
- 27. Почему этот полнотекстовый поиск PostgreSQL прерывается на другом (RDS) сервере?
- 28. PostgreSQL: Полнотекстовый поиск сайта Многоквартирный плюс только части сайта
- 29. Postgresql - полнотекстовый поиск индекс - неожиданный запрос приводит к
- 30. InnoDB полнотекстовый поиск (no lucene)
Просто объедините (с промежутком между ними) все элементы в массиве и используйте это как свой документ. – univerio
@univerio Правильно, я понимаю теоретически. Но как я мог бы выполнить это как SQL внутри моего триггера. Я знаю, как обновить столбец tsvector, когда столбцы, из которых он происходит, являются текстовыми. Но как я могу извлечь отдельные элементы массива (внутри SQL, испускаемого для создания триггера). Does 'to_tsvector()' просто работать над массивом (aka применить себя к каждому элементу массива)? Кажется маловероятным. –
Как связана эта SQLAlchemy? Я имею в виду, что, хотя вы можете создавать обработчики событий SQLA, это, вероятно, лучше всего обслуживает триггеры SQL в Postgresql. –