簡體   English   中英

在SmartListing Gem中使用全文搜索進行分組和搜索時出現PostgreSQL錯誤

[英]PostgreSQL error when grouping and search with full text search in SmartListing Gem

我在rails應用程序中使用smartgisting gem和postgresql。 該表顯示了一個關聯結果的元素列表,在某些情況下元素可以重復,但是我需要在表中只顯示該元素一次,但是當我將DISTINCT或uniq添加到活動記錄時,它會轉換為數組和智能列表顯示和錯誤。 然后我嘗試使用gruop解決它,它的工作原理! 但是當我嘗試使用pg_scope進行全文搜索時,pg查詢崩潰了。 這里的代碼:

class Prospect < ActiveRecord::Base
  include PgSearch
  pg_search_scope :search_by_name,
                  against: [:name, :father_last_name, :mother_last_name],
                  associated_against: { user: [:first_name, :father_last_name,
                                               :mother_last_name] },
                  ignoring: :accents

  has_many :projects, through: :project_prospects, dependent: :destroy
  .
  .
  .
class User < ActiveRecord::Base
  has_many :project_prospect
  has_many :projects, through: :user_projects, dependent: :nullify
end

查詢

search = User.find(id).prospects.select("prospects.*").group("prospects.id")
search = search.search_query("Say my name") if search_full_text.present? 

該組用於刪除活動記錄中的重復項,但是當需要全文搜索時,我會收到下一個錯誤

PG::GroupingError: ERROR:  column "pg_search_ece0055f6ad1de91cd168e.rank" must appear in 
the GROUP BY clause or be used in an aggregate function 

LINE 1: ...168e.pg_search_id GROUP BY prospects.id  ORDER BY pg_search_...

在數小時后搜索此問題的唯一解決方案是在全文搜索后創建組,並在SELECT中向查詢添加名為“rank”的變量,如下所示:

search = User.find(id).prospects
if search_full_text.present? 
    search = search.search_query("Say my name")
                   .select("prospects.*").group("prospects.id, rank")
else
    search = search.select("prospects.*").group("prospects.id")
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM