2012-02-24 48 views
4

PostgreSQL的全文检索尝试部分匹配来获取搜索在Heroku上工作使用的部分搜索使用texticle在Heroku

以下查询生成在Heroku上一个SQL错误,但在我的本地版本可以正常工作:

@events.search(params[:search]+":*") 

我使用的是Heroku共享数据库服务,这是PostgreSQL版本之间语法上可能的区别吗?

我应该用什么语法对PostgreSQL 8中的全文索引进行部分匹配搜索?

+1

当然也有版本之间的差异。您已经怀疑版本差异。提到你的版本似乎是谨慎的。 Heroku共享应该是8.3。您可能会感兴趣:[Heroku提供PostgreSQL 9.1](https://postgres.heroku.com/blog/past/2012/1/18/postgresql_91_available_in_beta/)到目前为止。 – 2012-02-24 05:50:07

+0

是的,但有什么区别?文档不建议在8和9之间有不同的语法。 – 2012-02-24 10:37:16

+0

您可以使用'%'进行部分匹配。你试过了吗?即@'event.search(“#{params [:search]}:%”)' – 2012-03-02 00:42:41

回答

2

事实证明,PostgreSQL版本8不支持使用:*语法进行部分搜索。

3

以下是changes in PostgreSQL 9.1

也许你可以尝试使用字符串插值而不是串接。

@events.search("#{params[:search]}:*") 

我不太确定接吻表情:*增加了texticle的功能。也许我需要学习更多的SQL。

+0

这是在PostgreSQL版本8上失败的相同语法。我尝试了连接和插值。该语法旨在用于部分匹配,类似于SQL“LIKE”搜索%'“。 – 2012-02-28 00:40:22

+0

这是我想用texticle做的事情。我在关于部分搜索的文本文档中找不到任何内容。但是,您可以使用:prefix => true选项,通过pg_search gem完成此操作。这可能不是你想听到的。 – 2012-02-29 19:16:20

+1

我在github上发现了一个暗示你想要做什么的提交。 https://github.com/tenderlove/texticle/commit/aff41d690b5dcb595bfa0ed8f21509859c4e6519 – 2012-02-29 19:34:01

0

可以使用带有前缀的TSEARCH选项:

:tsearch => {:prefix => true}