Ini adalah plugin flutter pencarian teks lengkap yang dibangun di atas tanttivy.
Tantivy adalah perpustakaan mesin pencari teks lengkap yang terinspirasi oleh Apache Lucene dan ditulis dalam karat.
Skema ini menggambarkan jenis (string, teks, u64) dari bidang serta bagaimana harus ditangani.
Jenis bidang skema didukung:
| Jenis Bidang | Keterangan |
|---|---|
| rangkaian | Konfigurasi Jenis Bidang String |
| teks | Konfigurasi Jenis Bidang Teks |
| U64 | Konfigurasi Jenis bidang Integers 64-Bits yang tidak ditandatangani |
| i64 | Konfigurasi Tipe Field 64-Bits yang Ditandatangani 64-Bit |
| f64 | 64-bit Float 64 Konfigurasi Jenis Bidang |
| tanggal | Konfigurasi Jenis Bidang Tanggal 64-Bit |
| segi | Sisi Hierachical |
| byte | Byte (satu per dokumen) |
Operator suka dan , atau , harus di huruf besar
Istilah Sederhana : "Misalnya: Barack Obama hanya tokenized menggunakan Tantivy's Simpletokenizer, karenanya menjadi [" Barack "," Obama "]. Istilah tersebut kemudian dicari dalam istilah default parser kueri.
misalnya jika tubuh dan judul adalah bidang default, istilah contoh kami adalah ["Judul: Barack", "Body: Barack", "Judul: Obama", "Body: Obama"]. Secara default, semua bidang tokenized dan diindeks adalah bidang default.
Berbagai istilah ditangani sebagai OR atau: Dokumen apa pun yang berisi setidaknya satu istilah akan melalui penilaian.
Perilaku ini lebih lambat, tetapi bukan ide yang buruk jika pengguna menyortir berdasarkan relevansi: pengguna biasanya hanya memindai beberapa dokumen pertama dalam urutan penurunan relevansi dan akan berhenti ketika dokumen tidak relevan lagi.
Operator Boolean : dan, atau. Dan diutamakan lebih dari atau, sehingga A dan B atau C ditafsirkan sebagai (a dan b) atau c.
Selain operator Boolean , -,, + dapat membantu mendefinisikan. Operator ini cukup untuk mengekspresikan semua pertanyaan menggunakan operator Boolean. Misalnya x dan y atau z dapat ditulis (( +x +y) z). Selain itu, operator ini dapat membantu mendefinisikan kueri "opsional yang diperlukan". (+XY) cocok dengan dokumen yang sama yang ditetapkan sebagai X, tetapi Y akan membantu memperbaiki skor.
Istilah negatif : Dengan mempersiapkan istilah dengan A -, suatu istilah dapat dikecualikan dari pencarian. Ini berguna untuk menghilangkan permintaan. mis. Apple -fruit
harus Ketentuan : Dengan mempersiapkan istilah dengan A +, istilah dapat dilakukan untuk pencarian.
Istilah frasa : Istilah yang dikutip menjadi pencarian frasa di bidang yang memiliki posisi yang diindeks. Misalnya, judul: "Barack Obama" hanya akan menemukan dokumen yang memiliki "Barack" segera diikuti oleh "Obama".
Istilah rentang : Pencarian rentang dapat dilakukan dengan menentukan batas awal dan akhir. Ini bisa inklusif atau eksklusif. Misalnya, judul: [A ke C} akan menemukan semua dokumen yang judulnya berisi kata secara leksikografis antara A dan C (inklusif batas bawah, batas atas eksklusif). Batas inklusif adalah [], eksklusif adalah {}.
Nilai Tanggal : Parser kueri mendukung RFC3339 tanggal yang diformat. Misalnya "2002-10-02t15: 00: 00.05z"
All Docs Query : A Plain * akan cocok dengan semua dokumen dalam indeks.
/// create a instance of SearchEngine and set it up
final engine = SearchEngine ();
SearchEngine . setup ();
/// get the path which used to store index files
final _path = await getApplicationDocumentsDirectory ().path;
/// define the schema of the data which wanted to be indexed
final _schema = r'{"id": "i64", "timestamp": "date", "content": "text"}' ;
/// open a exists one or create a new one on the device
engine. openOrCreate (_path, _schema);
/// encode the data object to a json string
final _doc = jsonEncode (dataObject);
/// start to index and store the data
await engine. index (_doc);
/// give the query keywords and the field which to search on
final res = await engine. search ( '关键字 关键词' , [ 'content' ], 1 , 10 );
/// remove a specify document by giving a field of u64 and it's value
/// document can't be deleted by text field, please use string field
await engine. deleteByU64 ( 'id' , 141906710246850560 );
