0

我在 Symfony 1.0 项目中使用 Propel 1.2,带有 PostgreSQL 数据库。我可以在 SELECT 语句中使用 Criteria::CUSTOM 来使用 Postgres 函数,如下所示(全文搜索):

`$c = 新标准();

$c->add(MyTablePeer::FULLTEXT_COLUMN, MyTablePeer::FULLTEXT_COLUMN." @@ to_tsquery('english', '要搜索的文本')", Criteria::CUSTOM);`

选择记录没问题,但是 INSERTing 呢?我目前正在使用原始 SQL 查询,但我想以更优雅的方式进行。我在 Symfony 网站上看到了这个片段,但它有很多代码,不符合我的需要。性能非常重要,所以也许没有比编写原始 SQL 更好的解决方案了。

如何编写像 $object->setFulltextColumn($parameters) 这样的自定义设置器?

先感谢您

4

1 回答 1

0

对于全文列上的插入/更新,为什么不使用触发器?然后,当您更改一行的文本时,全文列将自动更新。

CREATE TRIGGER my_table_fulltext_trigger 
BEFORE INSERT OR UPDATE ON my_table 
FOR EACH ROW EXECUTE PROCEDURE tsvector_update_trigger(
  'fulltext',
  'pg_catalog.english', 
  'column_with_text_1', 
  'column_with_text_2', 
  'column_with_text_N'
);

tsvector_update_trigger过程的参数是:tsvector 全文列的名称、语言配置,然后是要索引的所有列的名称。

于 2009-07-29T23:56:37.787 回答