2

我在一个名为 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\".*查询中的叶子,当然会返回所有列。

还有人遇到这个吗?有什么建议么?

:)

4

2 回答 2

0

可以在通话select后发表声明:fuzzy_search

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

如果这不起作用,请尝试pluck

Name.fuzzy_search('smith').pluck(:surname)
于 2013-08-01T17:59:27.200 回答
0

在最终找到解决方法之前,我只是一遍又一遍地遇到同样的问题:

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

这并不理想,因为(据我了解)它在技术上加载所有字段,然后剥离除:surname. 但总比没有好,我想。

于 2015-03-29T06:28:34.703 回答