Bu çok basit bir soru olabilir, bu yüzden şimdiden özür dilerim, ama veritabanı kullanımı için çok yeni.Postgres tam metin arama birden fazla ilgili tablolar arasında
Postgres'in tam metin aramasını birden çok birleşik tablolarda çalıştırmasını istiyorum. İlgili Modeller UserProfile ve UserInfo ile bir model Kullanıcı gibi bir şey düşünün. Arama sadece Kullanıcılar için olacak, ancak UserProfile ve UserInfo'dan bilgi içerecektir.
Arama için cin dizini kullanmayı planlıyorum. Bununla birlikte, toplanmış tsvector'ları tabloların arasında tutmak ve güncel tutmak için tetikleyicileri ayarlamak için Kullanıcı tablosunda ayrı bir tsvector sütuna gerekip gerekmediğimi belirsiz değilim. Veya ilgili tabloların herhangi birindeki ilgili alanlardan herhangi biri değiştiğinde kendisini güncel tutacak bir tsvector sütunu olmadan bir dizin oluşturmak mümkün ise. Ayrıca, tüm bunları oluşturmak için komutun sözdizimi ile ilgili ipuçları da çok takdir edilecektir.
Okuma sorgusunun nasıl çalışacağı hakkında ayrıntılı bilgi alabilir misiniz? Birden çok tablo boyunca postgresql tam metin araması yapmak için en iyi yol üzerinde belgeleri bulmaya çalışıyorum ve fazla bulmadım. Karşılaştığım bir sorun ise, sorguladığım tabloların her birinde bir dizin ayarlarsam, postgresql bir sorgulama yaptığımda tüm dizinleri kullanamayacağıydı. Gibi: kullanıcılardan ayrılan siparişlerden * birini seç ... soldaki line_items'e ... ts_vector ('english', orders.id) @@ ... veya ts_vector ('english', users.name) @@. .. –
Ayrıca iki tablo arama sorgusu sıralı bir tarama yapar ('SELECT COUNT (*) FROM ürünler WHERE to_tsvector ('basit', products.name::text) @@ to_tsquery ('basit', 'foo ':: text];), bir tablo ararken bir sorgu sadece endeksi kullanarak bir bitmap indeks taraması yapar ('SELECT COUNT (*) FROM ürünleri LEFT JOIN markaları ON products.brand_id = brands.id WHERE to_tsvector (' basit ' , products.name::text) @@ to_tsquery ('basit', 'foo' :: metin) OR to_tsvector ('basit', brands.name::text) @@ to_tsquery ('basit', 'foo' :: metin); '). – wvengen