2017-11-17 199 views
6

Posta gönderimi 0bkullanıyorum postbresimde tam metin arama yapmak db. Ben ettik böyle bir kapsam: i dize ile arama yaptığınızdapg_search gem ve fulltext arama sırası ayarı

pg_search_scope :fulltext, against: [:firstname, :lastname, :middlename], 
       using: { 
        tsearch: { prefix: true }, 
        trigram: { 
         :threshold => 0.2 
        } 
        } 

Gro ben tam kelime Gro maç kayıtlar grup gibi kelimeleriyle eşleşen kayıtların daha yüksek dereceye sahip olduğunu istiyoruz (grubu belgesindeki numaralı ürünü içerir).

Bunu yapmak için bazı ayarlar varsa, herhangi bir fikrin var mı?

cevap

3

Django'da çok benzer bir durum vardı ve trigram benzerliği ve tsearch rankını toparladım. Ben bir yakut uzman değilim

SELECT similarity('gro', 'gro') AS exact, similarity('gro', 'group') AS partial; 
exact | partial 
-------+---------- 
    1 | 0.428571 

ama pg_search belgelerine okudum ve düşünüyorum: Eğer PostgresSQL kontrol edebilirsiniz olarak tam eşlemesi ile kelime ile

Benzerlik, kısmi maç daha yüksektir Sorunuz için çözüm, buna benzer şekilde olmalıdır:

pg_search_scope :fulltext, 
       against: [:firstname, :lastname, :middlename], 
       using: { 
        tsearch: { prefix: true }, 
        trigram: { 
         :threshold => 0.2 
        } 
       }, 
       :ranked_by => ":tsearch + :trigram"