Merhaba. Django modellerimiz üzerinde arama yaparken PostgreSQL tarafından sunulan bazı metotları görelim. Tabi bu metotları kullanabilmek için PostgreSQL kurulu olmalı ve Python tarafında "psycopg2-binary" paketini kurmalısınız.
Ve daha sonra Django projenizde INSTALLED_APPS içerisine şunu eklemelisiniz;
Django tarafından tüm veritabanları için sunulan full-text-search araçları yeterli gelir çoğunlukla. Ancak bazen veritabanına özgü arama özelliklerini kullanmak isteyebiliriz. Örneğin vektörel arama, benzer oranı belirli bir değerden yüksek olanları arama gibi. Bu tarz aramalar, genelde web sitelerinde bulunan arama kutusunda kullanıcının yazdığı kelimelere yakın sözcükleri kullanıcıya önerip, kısa sürede sonuca ulaşmasını sağlamaktır. Tabi bunun bir bedeli vardır, zaman gibi. Bu öneriler bir algoritma yardımıyla yapılır. Bu sebeple daha spesifik verileri elde etmek istediğimizde harcanan süre de artabilir.
SearchVector
İlk olarak SearchVector ile başlayalım. Bu sınıf, django.contrib.postgres.search altında yer alır. Amacı tek bir field üzerinde değil, birden fazla field üzerinde arama yapmaktır. Elinizde kitap modelleri olduğunu düşünün. Kullanıcıya tek bir arama kutusu içerisinde hem yazar adı, hem de kitap adı ile arama yapabilme imkanı verebilirsiniz. Veya ürün modeline sahip olduğunuzu düşünün. Kullanıcı bir ürünü aramak istediğinde belki belirli bir markayı, belki de ürünün adını yazacaktır. Böyle bir aramayı tek field ile sınırlandıramayız. İşte SearchVector ile birden fazla field üzerinde sorgumuzu gerçekleştirebiliriz. Kullanımı şöyledir.
Kullanıcı Selpak araması yaptığında, Selpak ile alakalı marka ve ürünleri getirmiş olacaktır.
SearchQuery
SearchRank
İstenirse, aramanın yapılacağı sütunlara ağırlık verilebilir. Yani kullanıcının girdiği arama ifadesi ağırlıklı olarak belirli bir sütunla ilişkilendirilebilir. Mesela kullanıcıların genelde ürün adını yazdıkları bir sitede ağırlığı ürün adı sütununa vermek iyi bir seçenek olabilir.
Yorumlar
Yorum Gönder