Pencarian Teks PostgreSQL Parser Menggunakan Analisis Batas ICU
Tahap pertama pencarian teks lengkap adalah penguraian - melanggar dokumen dan permintaan teks ke dalam token individu (kata -kata berbeda, angka, dll). Namun ada bahasa di mana tugas ini tidak begitu sepele. Contoh yang paling menonjol adalah bahasa Asia Timur (seperti Cina, Jepang, Korea dan banyak lagi) - di mana kata -kata biasanya tidak dipisahkan oleh spasi putih dan tanda baca. Contoh lain adalah bahasa Ibrani; Sementara kata -kata dipisahkan dengan tanda baca, beberapa karakter mungkin dianggap sebagai tanda baca atau tidak tergantung pada konteksnya.
Parser default yang disertakan dengan subsistem pencarian teks lengkap PostgreSQL memberikan hasil yang agak tidak memuaskan dalam kasus -kasus tersebut. pg_icu_parser adalah ekstensi yang menyediakan implementasi parser pencarian teks lengkap khusus yang menggunakan rutin analisis batas kata ICU untuk mengekstrak token dari teks sumber. Ini mengimplementasikan algoritma yang ditentukan dalam Lampiran 29 dari Standar Unicode, dan dapat memberikan hasil yang masuk akal di banyak bahasa.
Saat ini pg_icu_parser harus dibangun dari kode sumber. Pastikan Anda memiliki file dukungan pengembangan (header dll) untuk PostgreSQL tersedia.
Untuk membangun dan menginstal, jalankan:
$ make install
Ini akan dibangun terhadap dan menginstal ke dalam instalasi PostgreSQL yang ditentukan oleh contoh pertama pg_config yang ditemukan di jalur saat ini. Untuk menargetkan instalasi tertentu (atau tidak ada di jalur):
$ make install PG_CONFIG=/path/to/pg_config
Ekstensi ini juga tersedia di PGXN.
Untuk memuat ekstensi ke dalam database, jalankan perintah SQL berikut sebagai pengguna dengan izin yang sesuai:
CREATE EXTENSION pg_icu_parser;Ini akan mendaftarkan parser teks khusus dalam skema saat ini. Untuk memanfaatkannya, konfigurasi pencarian teks harus dibuat seperti yang dijelaskan dalam manual PostgreSQL. Misalnya:
CREATE TEXT SEARCH CONFIGURATION sample (parser = icu_parser);
ALTER TEXT SEARCH CONFIGURATION sample ADD MAPPING FOR word WITH english_stem;
ALTER TEXT SEARCH CONFIGURATION sample ADD MAPPING FOR number , ideo, kana WITH simple; Jenis token yang dapat dipancarkan oleh parser adalah word , number , kana , ideo dan blank - ini selaras dengan tag Word Break yang didukung oleh ICU. Tidak ada batasan tentang kamus mana yang dapat digunakan.
pg_icu_parser memperlihatkan parameter konfigurasi tunggal:
pg_icu_parser.locale - string, opsional. Lokal ICU untuk digunakan dengan rutinitas analisis batas. Jika tidak diatur, default ke en . Biasanya tidak perlu mengatur parameter ini, karena tidak ada aturan deteksi batas kata yang sensitif terhadap lokal. Seperti dijelaskan di atas, kekuatan utama pg_icu_parser versus parser default yang sudah dibangun ke PostgreSQL adalah hasil tokenisasi yang lebih baik di berbagai bahasa. Selain itu, pg_icu_parser tidak bergantung pada pengaturan lokal basis data atau sistem operasi yang mendasarinya untuk menentukan apa itu surat.
Namun, ada beberapa trade-off yang harus diperhatikan yang dapat memengaruhi keputusan apakah pg_icu_parser sesuai untuk kasus penggunaan tertentu:
Parser default dapat mengenali berbagai pola sebagai token, termasuk URL, alamat email, berbagai jenis nilai numerik yang berbeda, dll. pg_icu_parser Di sisi lain memiliki tipe token yang secara signifikan lebih sedikit (dan beberapa yang didukung jauh lebih kasar), dan tidak dapat mendeteksi pola kompleks apa pun.
Saat ini pg_icu_parser tidak mendukung fungsi ts_headline . Mungkin di masa depan ...
pg_icu_parser jauh lebih lambat dari parser default . Namun, jika pengkodean server dari database adalah UTF-8, jalur cepat digunakan, yang mengurangi overhead. Lihat bagian benchmark di bawah ini.
Sebagai ekstensi pihak ke -3, pg_icu_parser hanya dapat digunakan di mana kontrol penuh dari instalasi PostgreSQL tersedia; Artinya, mungkin tidak dapat digunakan dengan solusi PostgreSQL yang dikelola.
Benchmark non-ilmiah berikut dapat memberikan perasaan seberapa banyak perlambatan yang mungkin diharapkan dari menggunakan pg_icu_parser alih-alih parser default. Skenario yang diuji adalah kueri untuk menghitung jumlah token non-blank di setiap dokumen dalam korpus. Corpus yang digunakan adalah Haaretz Corpus, yang terdiri dari 27.139 artikel bahasa Ibrani pendek. Nilai adalah waktu eksekusi rata -rata dalam milidetik 10 putaran, seperti yang dilaporkan dengan EXPLAIN ANALYZE :
| Pengkodean server | default | pg_icu_parser | Kemunduran |
|---|---|---|---|
| UTF-8 | 2.566.9974 | 2.884.3696 | -12,3% |
| ISO-8859-8 | 3.529.6487 | 5.059.3616 | -43,3% |
Tentu saja lingkungan yang berbeda dan korpora yang berbeda mungkin memiliki hasil yang berbeda, YMMV.
pg_icu_parser dilisensikan di bawah Lisensi Publik Mozilla 2.0.