如何阻止pg_search返回Rails中的所有列

时间:2013-08-01 14:32:15

标签: ruby-on-rails pg-search

我在名为Name的类中有一个pg_search_scope,如下所示:

pg_search_scope :fuzzy_search, 
                :against => [:surname, :forename, :other_names],
                :using => {
                   dmetaphone: {
                      tsvector_column: 'dmetaphone_search_vector'
                   },
                tsearch: {
                   dictionary: 'english',
                   tsvector_column: 'dictionary_search_vector'
                   }
                },
                :ranked_by => ":trigram"

我需要针对作用域运行SELECT,然后返回选择列。我除了下面的待办事项:

Name.select(:surname).fuzzy_search('smith')

但是会产生:

SELECT surname, \"names\".*, ((similarity((coalesce(\"names\".\"surname\"::text, '') || ' ' || coalesce(\"names\".\"forename\"::text, '') || ' ' || coalesce(\"names\".\"other_names\"::text, '')), 'smith'))) AS pg_search_rank FROM \"names\"  WHERE (((\"names\".\"dmetaphone_search_vector\") @@ (to_tsquery('simple', ''' ' || pg_search_dmetaphone('smith') || ' '''))) OR ((\"names\".\"dictionary_search_vector\") @@ (to_tsquery('english', ''' ' || 'smith' || ' ''')))) ORDER BY pg_search_rank DESC, \"names\".\"id\" ASC

因为我们可以看到在查询中留下\"names\".*,其中哪一个返回所有列。

其他人遇到过这个?有什么建议吗?

:)

2 个答案:

答案 0 :(得分:0)

select语句可以在fuzzy_search来电之后发出:

Name.fuzzy_search('smith').select(:surname)

如果不起作用,请尝试pluck

Name.fuzzy_search('smith').pluck(:surname)

答案 1 :(得分:0)

在最终搞清楚修复之前,我一次又一次地遇到同样的问题:

Name.fuzzy_search('smith').map(&:surname)

这并不理想,因为(据我所知)它在剥离除:surname之外的所有内容之前在技术上加载了所有字段。但我想,总比没有好。