我在名为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\".*
,其中哪一个返回所有列。
其他人遇到过这个?有什么建议吗?
:)
答案 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
之外的所有内容之前在技术上加载了所有字段。但我想,总比没有好。