Buat indeks pencarian di seluruh konten dari beberapa tabel database SQLite dan jalankan pencarian tersaring terhadap konten tersebut menggunakan Dataset
Contoh langsung plugin ini berjalan di https://datasette.io/-/beta - dikonfigurasi menggunakan file YAML ini.
Baca selengkapnya tentang cara kerja contoh ini di Membangun mesin pencari untuk datasette.io.
Instal alat ini seperti ini:
$ pip install dogsheep-beta
Jalankan pengindeks menggunakan alat baris perintah dogsheep-beta
:
$ dogsheep-beta index dogsheep.db config.yml
File config.yml
berisi rincian database dan tipe dokumen yang harus diindeks:
twitter.db :
tweets :
sql : |-
select
tweets.id as key,
'Tweet by @' || users.screen_name as title,
tweets.created_at as timestamp,
tweets.full_text as search_1
from tweets join users on tweets.user = users.id
users :
sql : |-
select
id as key,
name || ' @' || screen_name as title,
created_at as timestamp,
description as search_1
from users
Ini akan membuat tabel search_index
di database dogsheep.db
yang diisi oleh data dari kueri SQL tersebut.
Secara default, indeks pencarian yang dibuat alat ini akan dikonfigurasi untuk stemming Porter. Artinya pencarian kata seperti run
akan cocok dengan dokumen yang berisi runs
atau running
.
Jika Anda tidak ingin menggunakan Porter stemming, gunakan opsi --tokenize none
:
$ dogsheep-beta index dogsheep.db config.yml --tokenize none
Anda dapat menyampaikan argumen tokenize SQLite lainnya di sini, lihat dokumentasi tokenizers SQLite FTS.
Kolom yang dapat dikembalikan oleh kueri kami adalah:
key
- kunci utama unik (dalam tipe tersebut).title
- judul itemtimestamp
- stempel waktu ISO8601, misalnya 2020-09-02T21:00:21
search_1
- potongan teks yang lebih besar untuk dimasukkan dalam indeks pencariancategory
- ID kategori bilangan bulat, lihat di bawahis_public
- bilangan bulat (0 atau 1, defaultnya adalah 0 jika tidak disetel) yang menentukan apakah ini publik atau tidakCatatan publik adalah hal-hal seperti tweet publik Anda, postingan blog, dan komitmen GitHub.
Item yang diindeks dapat diberi kategori. Kategori adalah bilangan bulat yang sesuai dengan catatan dalam tabel categories
, yang secara default berisi yang berikut ini:
pengenal | nama |
---|---|
1 | dibuat |
2 | disimpan |
3 | diterima |
created
adalah untuk item yang telah dibuat oleh pemilik instance Dogsheep.
saved
adalah untuk item yang telah mereka simpan, sukai, atau favoritkan.
received
adalah untuk item yang secara khusus dikirimkan kepada mereka oleh orang lain - email masuk atau pesan langsung misalnya.
Jalankan datasette install dogsheep-beta
(atau gunakan pip install dogsheep-beta
di lingkungan yang sama dengan Datasette) untuk menginstal plugin Dogsheep Beta Datasette.
Setelah diinstal, antarmuka pencarian khusus akan tersedia di /-/beta
. Anda dapat menggunakan antarmuka ini untuk melakukan pencarian.
Plugin Datasette memiliki beberapa opsi konfigurasi. Anda dapat mengaturnya dengan menambahkan yang berikut ini ke file konfigurasi metadata.json
Anda:
{
"plugins" : {
"dogsheep-beta" : {
"database" : " beta " ,
"config_file" : " dogsheep-beta.yml " ,
"template_debug" : true
}
}
}
Pengaturan konfigurasi untuk plugin adalah:
database
- file database yang berisi indeks pencarian Anda. Jika file tersebut beta.db
Anda harus mengatur database
ke beta
.config_file
- file YAML yang berisi konfigurasi Dogsheep Beta Anda.template_debug
- setel ini ke true
untuk mengaktifkan keluaran debugging jika terjadi kesalahan pada templat khusus Anda, lihat di bawah. Setiap jenis item yang diindeks dapat menentukan HTML tampilan khusus sebagai bagian dari file config.yml
. Hal ini dapat dilakukan dengan menggunakan kunci display
yang berisi fragmen templat Jinja, dan secara opsional kunci display_sql
dengan SQL tambahan untuk dieksekusi guna mengambil data yang akan ditampilkan.
Berikut cara menentukan templat tampilan khusus untuk tweet:
twitter.db :
tweets :
sql : |-
select
tweets.id as key,
'Tweet by @' || users.screen_name as title,
tweets.created_at as timestamp,
tweets.full_text as search_1
from tweets join users on tweets.user = users.id
display : |-
<p>{{ title }} - tweeted at {{ timestamp }}</p>
<blockquote>{{ search_1 }}</blockquote>
Contoh ini menggunakan kembali nilai yang disimpan dalam tabel search_index
ketika kueri pengindeksan dijalankan.
Untuk memuat nilai tambahan untuk ditampilkan di templat, gunakan kueri display_sql
seperti ini:
twitter.db :
tweets :
sql : |-
select
tweets.id as key,
'Tweet by @' || users.screen_name as title,
tweets.created_at as timestamp,
tweets.full_text as search_1
from tweets join users on tweets.user = users.id
display_sql : |-
select
users.screen_name,
tweets.full_text,
tweets.created_at
from
tweets join users on tweets.user = users.id
where
tweets.id = :key
display : |-
<p>{{ display.screen_name }} - tweeted at {{ display.created_at }}</p>
<blockquote>{{ display.full_text }}</blockquote>
Kueri display_sql
akan dieksekusi untuk setiap hasil pencarian, meneruskan nilai kunci dari tabel search_index
sebagai parameter :key
dan istilah pencarian pengguna sebagai parameter :q
.
Ini berfungsi dengan baik karena banyak kueri kecil yang efisien di SQLite.
Jika terjadi kesalahan saat merender salah satu templat Anda, halaman hasil pencarian akan menampilkan kesalahan 500. Anda dapat menggunakan pengaturan konfigurasi template_debug
yang dijelaskan di atas untuk menghasilkan informasi debug untuk item hasil pencarian yang mengalami kesalahan.
Plugin ini pada akhirnya akan menyertakan sejumlah pintasan berguna untuk merender konten menarik.
Pintasan pertama yang tersedia adalah untuk menampilkan peta. Jadikan keluaran konten khusus Anda seperti ini:
< div
data-map-latitude =" {{ display.latitude }} "
data-map-longitude =" {{ display.longitude }} "
style =" display: none; float: right; width: 250px; height: 200px; background-color: #ccc; "
> </ div >
JavaScript pada halaman tersebut akan mencari elemen apa pun dengan data-map-latitude
dan data-map-longitude
dan, jika ditemukan, akan memuat Leaflet dan mengonversi elemen tersebut menjadi peta yang berpusat pada lokasi tersebut. Tingkat zoom default adalah 12, atau Anda dapat mengatur atribut data-map-zoom
untuk menyesuaikannya.
Untuk menyiapkan plugin ini secara lokal, periksa dulu kodenya. Kemudian buat lingkungan virtual baru:
cd dogsheep-beta
python3 -mvenv venv
source venv/bin/activate
Atau jika Anda menggunakan pipenv
:
pipenv shell
Sekarang instal dependensi dan tes:
pip install -e '.[test]'
Untuk menjalankan tes:
pytest