2013-03-27 41 views
1

更新無法使用pg_search寶石

首先,有沒有方法「上下文」從Postgres的檢索摘錄。這是我的大腦在某個時刻編造的一個詞語,並且堅持不懈。顯然我應該運行.excerpt()。其次,我針對返回的數組運行命令,而不是PG_Search :: Document的單個實例。雙重錯誤,但是代碼實際上工作正常。

末更新

首先,一些系統信息:

  • 紅寶石1.9.3p194
  • 的Rails 3.2.13
  • pg_search 0.5.7
  • 的Postgres 9.2.3(帶 unaccent enabled)

我想按照這個線程所取得的進展:(How to show excerpts from pg-search multisearch results

好吧,假設使用從那兒剽竊後以下查詢:

@query = params[:query] 
PgSearch.multisearch(@query).select("ts_headline(pg_search_documents.content, plainto_tsquery('english', ''' ' || unaccent('#{@query}') || ' ''' || ':*')) AS excerpt") 

回報:

=> [#<PgSearch::Document id: 7, content: "1 <p>You think water moves fast? You should see ice...", searchable_id: 2, searchable_type: "Release", created_at: "2013-03-27 18:58:52", updated_at: "2013-03-27 18:58:52">] 

它成功返回一些搜索結果,但它們根本沒有context方法。就好像我只是打電話multisearch沒有select方法。

對於SQL和Postgres,我是一個新手,所以我不確定從哪裏開始調試該代碼段。我會喜歡一些幫助調試或解釋發生了什麼。

此外,我認爲很重要,我想感謝任何人在pg_search上工作或回答這些問題。你讓世界變得更美好。

+0

想知道你是如何解決這個問題的 – 2016-07-15 12:08:33

回答

0

你必須選擇你需要的其他列。

例如

sanitized = ActionController::Base.helpers.sanitize(params[:q]) 
@results = PgSearch.multisearch(params[:q]) 
        .select(:id, :content, :searchable_id, :searchable_type) 
        .select(["ts_headline(pg_search_documents.content, plainto_tsquery('english', ''' ' || '#{sanitized}' || ' ''' || ':*')) AS excerpt"]) 

將返回的ID,內容,searchable_id,searchable_type,摘錄

還要注意消毒。不想受到SQL注入攻擊。 :]