Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu uzantı lakebase_tokenizer , Lakebase'te PostgreSQL tam metin aramasına yapılandırılabilir tam kelime tokenizasyonu ekliyor. Uzantıyla oluşturulan metin arama yapılandırmaları, operatör, @@ sıralama fonksiyonları ve GIN indeksleriyle çalışırto_tsvector. Ayrıca BM25 sıralaması için oluşturulan tsvector değerleri lakebase_text de kullanabilirsiniz.
Bu uzantı, şablonu tokenizer_wholeword PostgreSQL'in standart metin arama sözlüğü arayüzü aracılığıyla sağlar. Şablon, küçük harf dönüştürme, Unicode normalizasyonu, aksan kaldırma, İngilizce sahiplik kaldırma, özel durma kelimeleri, bire bir eşanlamlı kelimeler ve İngilizce stem-inglem desteğini destekler.
Install
Uzantını veritabanınıza yükleyin. Bu sayfadaki örnekler, uzantı nesnelerinin kolayca tanımlanmasını sağlamak için özel bir şema kullanır:
CREATE SCHEMA IF NOT EXISTS tokenizer_ext;
CREATE EXTENSION IF NOT EXISTS lakebase_tokenizer WITH SCHEMA tokenizer_ext;
Uzantı taşınabilir. Kurulumda başka bir şema ile değiştirebilirsiniz tokenizer_ext .
Uzantıyı yükseltme
Yeni bir Lakebase Search sürümü özellikler, düzeltmeler ve performans iyileştirmeleri ekleyebilir. PostgreSQL, yüklü uzantı sürümünü otomatik olarak güncellemez. Kurulu ve en güncel sürümleri kontrol edin:
SELECT installed_version, default_version
FROM pg_available_extensions
WHERE name = 'lakebase_tokenizer';
Uzantıyı en son mevcut sürüme güncelledin:
ALTER EXTENSION lakebase_tokenizer UPDATE;
ALTER EXTENSION saklanan tsvector değerleri yenilemez veya bağımlı GIN veya lakebase_bm25 indeksleri yeniden oluşturmaz. Bir güncelleme tokenizasyon çıktısını değiştirirse, depolanmış tsvector değerleri yeniden oluşturun ve gerekli endeks bakımı için sürüm notlarını takip edin.
Hızlı bir başlangıç tokenizer_wholeword
Aşağıdaki örnek, şablondan tokenizer_wholeword bir sözlük oluşturur ve ardından yaygın PostgreSQL token türlerini metin arama yapılandırmasında ona eşler:
CREATE TEXT SEARCH DICTIONARY documents_dict (
TEMPLATE = tokenizer_ext.tokenizer_wholeword,
Lowercase = 'true',
StripAccents = 'true',
Stemmer = 'english'
);
CREATE TEXT SEARCH CONFIGURATION documents_cfg (COPY = pg_catalog.simple);
ALTER TEXT SEARCH CONFIGURATION documents_cfg
ALTER MAPPING FOR asciiword, word, numword, hword_numpart, hword_part, hword_asciipart
WITH documents_dict;
Yapılandırmayı kullanarak bir tsvector, bir GIN indeksi oluşturun ve tam metin sorguları çalıştırın:
CREATE TABLE documents (
id BIGSERIAL PRIMARY KEY,
body TEXT NOT NULL,
search_vector TSVECTOR GENERATED ALWAYS AS (
to_tsvector('documents_cfg', body)
) STORED
);
INSERT INTO documents (body) VALUES
('Cats are running near the café.'),
('A dog is sleeping in the house.');
CREATE INDEX documents_search_idx ON documents USING gin (search_vector);
SELECT id, body
FROM documents
WHERE search_vector @@ plainto_tsquery('documents_cfg', 'running café');
Belgeler ve sorgular için aynı metin arama yapılandırmasını kullanın, böylece her iki taraf da aynı tokenizasyon stratejisi ve seçeneklerini uygulayabilir.
Şablon: tokenizer_wholeword
Nasıl çalışır?
PostgreSQL'in metin arama ayrıştırıcısı tokenizer_wholeword tarafından sözlüğe iletilen her belirteç için şu işlemler uygulanır:
-
Lowercase: Tokenı küçük harfe dönüştürün. -
Normalize: Unicode normalizasyonunu uygula. -
StripAccents: Vurguları kaldırın. -
EnglishPossessive: En az bir karakter kaldığında İngilizce sahiplik eki kaldırılır. -
Stopwords: Belirteç yapılandırılmış bir durdurma kelimesine uyuyorsa lexeme yaymayın ve işlemeyi durdurun. Token, üretilentsvector'den çıkarılmıştır. -
Synonyms: Yapılandırılmış değişimi yayım ve token eşanlamlısıyla eşleşirse işlemi durdurur. -
Stemmer: Eğer eşanlamlı bir eşleşme yoksa ve kök kullanımı etkinleştirilmemişse, İngilizce stemmer'i uygulayın.
Durak kelimeler ve eşanlamlılar ekleyin
Şablon, tokenizer_wholeword uzantılarla yönetilen SQL tablolarından lakebase_tokenizer_stopwords özel durak kelimeleri ve eşanlamlıları yükleyebilir ve lakebase_tokenizer_synonyms. Sütun, name satırları veya sözlük seçeneğiyle seçtiğiniz StopwordsSynonyms bir kümeye gruplar.
INSERT INTO tokenizer_ext.lakebase_tokenizer_stopwords (name, word) VALUES
('app_stopwords', 'the'),
('app_stopwords', 'and'),
('app_stopwords', 'or');
INSERT INTO tokenizer_ext.lakebase_tokenizer_synonyms (name, word, synonym) VALUES
('app_synonyms', 'usa', 'united_states'),
('app_synonyms', 'uk', 'united_kingdom');
Bir tokenizer_wholeword sözlük oluştururken veya değiştirirken kümelere referans verin:
ALTER TEXT SEARCH DICTIONARY documents_dict (
Stopwords = 'app_stopwords',
Synonyms = 'app_synonyms'
);
Uzantı, ve EnglishPossessiveuygulandıktan StripAccentsNormalizeLowercasesonra ancak uygulanmadan Stemmerönce her belirteçle durak kelimeleri ve eşanlamlı kaynak kelimeleri karşılaştırır. Katalog girişleri otomatik olarak dönüştürülmez, bu yüzden bu etkinleştirilmiş seçeneklerin oluşturduğu tam biçimde saklanırlar:
- Ile
Lowercase = 'true'ise küçük harfler kullanın. IleLowercase = 'false'ise büyük harf belirti tokenla eşleşmelidir. - Etkinleştirildiğinde
Normalize, girişleri seçilmiş Unicode normalizasyon formunda depolayın. - Ile
StripAccents = 'true'desenli formu depolayın. Örneğin, eşleştirmekcaféiçin depolacafe. - Sap yapmadan önce formu saklayın. Örneğin, ile
Stemmer = 'english'birrungirdirunningeşleşmez. O tokenı filtrelemek için ekleyinrunningveya değiştirin.
Küme adları en fazla 256 bayt içerebilir. Kelimeler ve eşanlamlılar en fazla 1024 bayt içerebilir. Her adlandırılmış durak kelime veya eşanlamlı küme, 100.000'e kadar satır içerebilir.
Bir eşanlamlı ikame tam olarak depolandığı gibi yayılır ve stemmer tarafından işlemez. Eşanlamlılar, her kaynak kelime için bir yer değiştirmeyi destekler. Çok kelimeli bir kelime yerine bir sözlük olarak temsil etmek için, alt çizgi gibi bir ayırıcı kullanın; örneğin .united_states
Bir küme değiştirildikten sonra, kümeye referans veren her sözlüğün sahibi, yeniden yüklemeyi zorlamak için bir no-op ALTER TEXT SEARCH DICTIONARY çalıştırmalıdır:
ALTER TEXT SEARCH DICTIONARY documents_dict (dummy);
dummy Bu seçenek 'de tokenizer_wholewordyok. Bir değerin atılması PostgreSQL'den bu var olmayan seçeneği kaldırmasını ister; bu da önbelleği geçersiz hale getirir ve hiçbir yapılandırılmış seçenek değişmez.
Sözlük yeniden yüklendikten sonra, kaynak satırlar yeniden yazarak depolanan tsvector değerleri yeniden üretin:
UPDATE documents SET body = body;
Roller ve erişim
Uygulama erişimini tokenizer yönetiminden ayırmak için iki rol kullanın:
-
app_rolemevcut sözlükleri kullanır. İlgili şemalarda veSELECTuzantı katalog tablolarında olmasıUSAGEgerekir, ancak sözlüklere sahip olması gerekmez. -
tokenizer_admindurak kelime ve eşanlamlı setleri yönetir, sözlükler ve metin arama yapılandırmaları oluşturur ve sahiplenir, ayrıca bir küme değiştikten sonra yeniden yükleme komutunu çalıştırır.
Uzantı şemasına ve katalog tablolarına erişim izni verin:
GRANT USAGE ON SCHEMA tokenizer_ext TO app_role, tokenizer_admin;
GRANT SELECT ON
tokenizer_ext.lakebase_tokenizer_stopwords,
tokenizer_ext.lakebase_tokenizer_synonyms
TO app_role;
GRANT SELECT, INSERT, UPDATE, DELETE ON
tokenizer_ext.lakebase_tokenizer_stopwords,
tokenizer_ext.lakebase_tokenizer_synonyms
TO tokenizer_admin;
tokenizer_admin ayrıca CREATE şemada da gereksinimler vardır; burada sözlükler ve metin arama yapılandırmaları saklanır. Bu nesneleri , tokenizer_adminolarak yaratın veya sahipliklerini ona devredin. Katalog tablolarına yazı erişimi, mevcut sözlüklerin sahipliğini sağlamaz.
Options
Seçenekler tokenizer_wholeword için CREATE TEXT SEARCH DICTIONARY veya ALTER TEXT SEARCH DICTIONARYbelirtin. Seçenek isimleri büyük harf duyarsızdır.
| Seçenek | Türü | Varsayılan | Description |
|---|---|---|---|
Lowercase |
boolean | true |
Tokenları diğer işlemler uygulamadan önce küçük harflere dönüştürür.
Stemmer = 'english' gerektirir Lowercase = 'true'. |
Normalize |
NFC, NFD, NFKC, NFKDveya none |
none |
Seçilen Unicode normalizasyon formunu uygular. Bu, temsili kanonikleştirir ancak karakterleri kaldırmaz. Örneğin, NFC önceden kompozisyona é alınmış ve e ardından birleşen akut aksan eşdeğeri ile takip edilir. |
EnglishPossessive |
boolean | true |
En az bir karakter ekten önce geldiğinde arkasındaki 's, ’s, 's veya kaldırılır. Bağımsız bir ek ise değişmeden kalır. |
StripAccents |
boolean | false |
NFKD normalizasyonu uygular ve birleştirme işaretlerini kaldırır. Örneğin café, cafe olur. Bu seçenek etkinleştirildiğinde, NFKD adımı herhangi ayrı bir Unicode normalizasyonunu gereksiz hale getirdiği için çıkarabilirsiniz Normalize . |
Stopwords |
Set adı | None | Adı verilen kümeyi kullanır.tokenizer_ext.lakebase_tokenizer_stopwords |
Synonyms |
Set adı | None | 'den bire bir yer tokenizer_ext.lakebase_tokenizer_synonymsdeğiştirme setini kullanır. |
Stemmer |
english |
None | Paketli Snowball 3.1.0 İngilizce stemmer'i kullanıyor. Stemming'i devre dışı bırakmak için bu seçeneği çıkarın. Kök kelimesi duraklama listesi içermez. |
Katalog tabloları
| Masa | Columns | Description |
|---|---|---|
lakebase_tokenizer_stopwords |
name text, word text |
Tokenizer şablonlarını Stopwordsdestekleyen stop-word setleri depolar. Birincil anahtardır (name, word). |
lakebase_tokenizer_synonyms |
name text, word text, synonym text |
Mağazalar, tokenizer şablonlarını destekleyen Synonymsbire bir yerine geçimler adlandırdı. Birincil anahtardır (name, word). |
BM25 sıralamasını lakebase_text ile kullanın
Metin arama yapılandırmaları lakebase_tokenizer ile uyumlu standart PostgreSQL tsvector değerleri lakebase_textüretir. BM25 ilgililik sıralaması ve top-K geri dönüşünü kullanmak için aynı tsvector sütunda bir lakebase_bm25 indeks oluşturun. Kurulum, indeks oluşturma ve sorgu sözdizimi için bkz.lakebase_text