[英]PG full text search on rails using pg_search gem for substring
[英]Full text search for Ruby on Rails app using Postgres and pg_search gem
我已經在pg_search的google組上發布了此查詢:
https://groups.google.com/forum/?fromgroups#!topic/casecommons-dev/3tbCthkDHg0
但是沒有回應,因此我將其發布在StackOverflow上。 我的問題是:在以下情況下使用pg_search gem時,是否應該創建GIN類型索引?
我的搜索僅限於使用pg_search_scope在單個模型中進行搜索。
這是一個具體示例:
class Scenario < ActiveRecord::Base
...
include PgSearch
pg_search_scope :search, :against => [:name, :compute_ngls],
:using => { :tsearch => {:dictionary => "english"} }
def self.text_search(query)
if query.present?
search(sanitize(query))
else
scoped
end
end
...
end
對text_search方法的調用如下:
scenarios = scenarios.text_search(params[:sSearch])
我在某些列上只有常規btree索引,例如:name。 我沒有杜松子酒或吉斯索引。 我的問題是:我應該明確創建這些索引嗎? 如果是,那么哪種類型,在哪些列上? 能否請您給我介紹創建這些索引的語法?
關於是否創建索引的問題不是通過查看您的Ruby代碼就可以知道的,而且也不可能通過查看您的db模式而知道。 這些問題取決於查詢的選擇性,正在索引的數據量以及表的大小。 這是因為PostgreSQL表支持物理順序掃描,如果檢索到表的重要部分,則通常比索引驅動的查找要快。
GIN和GiST索引將幫助您進行全文搜索,而btrees並不是特別有用,但要使它們有用,您必須對大量表進行索引並僅提取該表的一小部分。
我的首選是等待有性能原因來創建索引,而不是在有疑問時先創建索引。
編輯
最近對GIN的大量搜索以及對全文檢索的豐富經驗使我改變了上面的建議。 我現在認為,特別是對於全文索引,最好先創建GIN索引,然后再創建GIN索引(如果它影響性能的話),然后再刪除它。
請注意,GIN具有較大的寫開銷,因此它絕對不是免費的。 但是,如果fts是應用程序中的主要用例,則FTS索引幾乎總是具有足夠的選擇性,以很有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.