PostgreSQL

PostgreSQL Tam Metin Arama Örnekleri

PostgreSQL Tam Metin Arama Örnekleri
Herhangi bir veritabanı, etkili ve çok yönlü bir arama yeteneğine sahip olmalıdır. Ne zaman veritabanlarına atıfta bulunsa, PostgreSQL tüm zanaatların ustasıdır. SQL ile sevmeye başladığınız her şeyi bir dizi SQL dışı veritabanı işleviyle birleştirir. JSONB bilgi sıralama gibi bu SQL olmayan işlevlerden herhangi biri harikadır ve farklı bir veritabanı denemeniz bile gerekmez. Tam Metin Arama, PostgreSQL'e dahil edilen en yeni SQL Olmayan özellikler arasındadır. PostgreSQL'in tam metin araması tamamen işlevsel mi, yoksa ayrı bir arama dizini mi istiyorsunuz?? Bir şekilde bir kod kapağı daha eklemekten yoksun tam bir metin araması geliştirebilirseniz, bu harika bir fikir olacaktır. MySQL veritabanında kalıp aramayı zaten biliyorsunuz. O halde önce onlara bir göz atalım. Bilgisayar sisteminizde PostgreSQL komut satırı kabuğunu açın. Varsayılan seçenekler dışında belirli bir kullanıcı için sunucu başlığı, veritabanı adı, bağlantı noktası numarası, kullanıcı adı ve şifreyi yazın. Varsayılan hususlarla slog yapmanız gerekiyorsa, tüm seçenekleri boş bırakın ve Her seçeneği girin'e basın. Şu anda, komut satırı kabuğunuz üzerinde çalışmak için donatılmıştır.

Tam metin arama kavramını anlamak için, LIKE anahtar sözcüğü aracılığıyla kalıp arama bilgisini hatırlamanız gerekir. Öyleyse, 'test' veritabanında, içinde aşağıdaki kayıtların bulunduğu bir 'kişi' tablosu olduğunu varsayalım.

>> SEÇİM * KİŞİDEN;

Diyelim ki, 'name' sütununun herhangi bir değerinde 'i' karakterine sahip olduğu bu tablonun kayıtlarını almak istiyorsunuz. Komut kabuğunda LIKE yan tümcesini kullanırken aşağıdaki SELECT sorgusunu deneyin. Aşağıdaki çıktıdan, 'isim' sütununda bu belirli 'i' karakteri için yalnızca 5 kaydımız olduğunu görebilirsiniz.

>> SEÇ * '%i%' GİBİ ismin NEREDE kişiden;

TV Sektörünün Kullanımı:

Bazen, kelime orada olmasına rağmen, hızlı bir kalıp araması yapmak için LIKE Anahtar Kelimesini kullanmanın hiçbir faydası yoktur. Belki standart ifadeler kullanmayı düşünebilirsiniz ve bu uygun bir alternatif olsa da, normal ifadeler hem güçlü hem de ağırdır. Bir metindeki tüm kelimeler için prosedürel bir vektöre sahip olmak, bu kelimelerin yerel bir açıklaması, bu konuyu ele almanın çok daha etkili bir yoludur. Tam metin arama kavramı ve buna yanıt vermek için veri türü tsvector oluşturuldu. PostgreSQL'de tam olarak istediğimizi yapan iki yöntem vardır:

Örnek 01:

Bir vektör oluşturmanın basit bir örneği ile başlayalım. İp için bir vektör yapmak istediğinizi varsayalım: "Bazı insanların uygun fırçalama ile kıvırcık kahverengi saçları vardır.”. Bu nedenle, aşağıda eklendiği gibi bir SELECT sorgusunun parantez içine bu cümleyle birlikte bir to_tvsector() işlevi yazmanız gerekir. Aşağıdaki çıktıdan, her belirteç için bir referans vektörü (dosya konumları) vereceğini ve ayrıca makaleler (the) ve bağlaçlar (ve, veya) gibi küçük bağlamlı terimlerin kasıtlı olarak yok sayıldığını görebilirsiniz.

>> SELECT to_tsvector('Bazı kişilerin düzgün fırçalama ile kıvırcık kahverengi saçları olur');

Örnek 02:

Her ikisinde de bazı veriler bulunan iki belgeniz olduğunu varsayalım. Bu verileri depolamak için şimdi gerçek bir token oluşturma örneği kullanacağız. Aşağıdaki CREATE TABLE sorgusunu kullanarak içinde bazı sütunlar bulunan 'test' veritabanınızda bir 'Veri' tablosu oluşturduğunuzu varsayalım. İçinde 'token' adında bir TVSECTOR tipi sütun oluşturmayı unutmayın. Aşağıdaki çıktıdan oluşturulan tabloya göz atabilirsiniz.

>> TABLO Verilerini OLUŞTUR (Id SERİ BİRİNCİL ANAHTAR, bilgi METİN, belirteç TSVECTOR);

Şimdi, bu tablodaki her iki belgenin de genel verilerini eklememiz gerekiyor. Bunu yapmak için komut satırı kabuğunuzda aşağıdaki INSERT komutunu deneyin. Son olarak, her iki belgedeki kayıtlar da başarıyla 'Veri' tablosuna eklendi.

>> INSERT INTO VERİ (bilgi) DEĞERLER ('İki yanlış asla bir doğru yapmaz.'), ('Futbol oynayabilen odur.'), ('Bunda bir rol oynayabilir miyim??'), ('İnsanın içindeki acı anlaşılamaz'), ('Hayatına şeftali getir);

Şimdi her iki belgenin belirteç sütununu kendi özel vektörleriyle kolonize etmeniz gerekiyor. Sonuç olarak, basit bir GÜNCELLEME sorgusu, belirteçler sütununu her dosya için karşılık gelen vektörleriyle dolduracaktır. Bu nedenle, bunu yapmak için komut kabuğunda aşağıda belirtilen sorguyu çalıştırmanız gerekir. Çıktı, güncellemenin nihayet yapıldığını gösteriyor.

>> GÜNCELLEME Veri f1 SET belirteci = to_tsvector(f1.bilgi) FROM Verilerinden f2;

Artık her şeyi yerine getirdiğimize göre, bir tarama ile "bir kutu" çizimimize dönelim. AND operatörü ile to_tsquery yapmak, daha önce belirtildiği gibi, aşağıda belirtilen çıktıdan gösterildiği gibi, dosyaların dosyalardaki konumları arasında hiçbir fark yaratmaz.

>> SELECT Id, FROM Data WHERE token @@ to_tsquery('can & one');

Örnek 04:

Birbirine “yan” olan kelimeleri bulmak için aynı sorguyu ' ile deneyeceğiz<->' Şebeke. Değişiklik aşağıdaki çıktıda görüntülenir.

>> SELECT ID, FROM Data WHERE token @@ to_tsquery('can <-> bir');

İşte diğerinin yanında hemen olmayan bir kelimenin bir örneği.

>> SELECT Id, FROM Data WHERE token @@ to_tsquery('one <-> Ağrı');

Örnek 05:

Mesafe operatöründe mesafeyi referans almak için bir sayı kullanarak hemen yan yana olmayan kelimeleri bulacağız. 'Getir' ve 'hayat' arasındaki yakınlık, görüntülenen görüntüden 4 kelimedir.

>> SEÇ * FROM Data WHERE token @@ to_tsquery('bring <4> hayat');

Yaklaşık 5 kelime için kelimeler arasındaki yakınlığı kontrol etmek için aşağıya eklenmiştir.

>> SELECT * FROM Data WHERE belirteci @@ to_tsquery('yanlış <5> sağ');

Sonuç:

Son olarak, To_tvsector ve to_tsquery operatörlerini ve işlevlerini kullanarak Tam metin aramanın tüm basit ve karmaşık örneklerini yaptınız.

OpenTTD Tutorial
OpenTTD is one of the most popular business simulation games out there. In this game, you need to create a wonderful transportation business. However,...
SuperTuxKart for Linux
SuperTuxKart is a great title designed to bring you the Mario Kart experience free of charge on your Linux system. It is pretty challenging and fun to...
Battle for Wesnoth Tutorial
The Battle for Wesnoth is one of the most popular open source strategy games that you can play at this time. Not only has this game been in developmen...