Toko Cross-Data Sederhana Toko Pencarian Teks Lengkap Diimplementasikan untuk Java 8+
Pencarian teks lengkap adalah fitur utama dari aplikasi modern. Namun, penyimpanan data yang berbeda mengekspos sintaks yang berbeda untuk melakukan pencarian teks lengkap, dan banyak dari sintaks ini tidak ramah pengguna. Beberapa penyimpanan data sama sekali tidak mengekspos fitur pencarian teks lengkap! Ini menyulitkan pengembang untuk mengekspos pengalaman pencarian yang menghadap pengguna yang konsisten. Litecene adalah bahasa kueri standar yang akrab berdasarkan sintaks Lucene dengan transpiler ke penyimpanan data populer seperti BigQuery yang memudahkan pengembang untuk mengekspos sintaks pencarian yang konsisten dan ramah pengguna kepada pengguna sambil memanfaatkan sebagian besar fitur pencarian teks lengkap toko aplikasi mereka.
Bagian ini menjelaskan sintaks kueri litecene umum. Perhatikan bahwa transpiler yang berbeda dapat menerapkan pencarian teks untuk kueri yang sama secara berbeda. Bagian ini hanya menjelaskan apa yang merupakan kueri yang valid dan definisi logis dari suatu kecocokan; Setiap implementasi transpiler mendokumentasikan bagaimana pertanyaan yang valid dicocokkan di penyimpanan data terkait.
Sebagai contoh, ini mungkin permintaan litecene yang baik untuk mengidentifikasi posting media sosial yang menyebutkan cara umum orang pengguna smartphone mereka:
(smartphone OR "smart phone" OR iphone OR "apple phone" OR android OR "google phone" OR "windows phone" OR "phone app"~8) AND (call OR dial OR app OR surf OR browse OR camera OR picture OR pic OR selfie)
Litecene mendukung tujuh jenis klausa pencarian: istilah, frasa, daftar, grup, dan, atau, dan tidak.
Klausa istilah adalah string karakter non-whitespace yang tidak dikutip. Dokumen yang cocok harus berisi istilah yang diberikan. Berikut ini adalah semua klausul istilah litecene yang valid:
helloworldwhat's#selfie@twitterhttps://www.example.com/this/is/a/hyperlink Klausul istilah juga dapat diakhiri dengan wildcard ( * ) untuk menunjukkan pencarian awalan. Dalam hal ini, dokumen yang cocok harus berisi istilah dengan awalan yang diberikan. Berikut ini adalah semua klausul istilah awalan litecene yang valid:
developer*what's*https://www.example.com/*Klausa frasa adalah string karakter yang dikutip. Dokumen yang cocok harus berisi persyaratan yang diberikan di sebelah satu sama lain. Berikut ini adalah semua klausul frasa litecene yang valid:
"hello, world!""The rain in Spain falls mainly on the plains.""super cool search" Istilah dalam klausa frasa dapat diakhiri dengan wildcard ( * ) untuk menunjukkan pencarian awalan. Dalam hal ini, dokumen yang cocok harus berisi persyaratan yang diberikan dengan awalan yang diberikan di sebelah satu sama lain. Berikut ini adalah semua klausul frasa litecene yang valid dengan istilah wildcard:
"It wa* the best of times""It was the wors* of times" Klausul frasa dapat diikuti segera oleh tilde ( ~ ) dan nomor integer untuk menunjukkan pencarian kedekatan. Dalam hal ini, dokumen yang cocok harus berisi semua istilah reguler atau awalan yang diberikan dalam jumlah ketentuan yang diberikan satu sama lain dalam urutan apa pun. Panjang kedekatan harus setidaknya jumlah istilah dalam frasa. Berikut ini adalah klausul frasa litecene yang valid dengan kedekatan:
"hello, world!"~8"It wa* the best of times"~10Klausa daftar adalah dua atau lebih klausa pencarian litecene yang valid dipisahkan oleh whitespace. Dokumen yang cocok harus cocok dengan klausa yang diberikan dalam urutan apa pun. Berikut ini adalah semua klausul frasa litecene yang valid:
hello, world!The rain in Spain falls mainly on the plains.engineer* "developer* productivity"~8 Klausa grup adalah klausa pencarian litcene yang valid yang dikelilingi oleh tanda kurung ( ) . Dokumen yang cocok harus sesuai dengan klausa yang terkandung. Berikut ini adalah semua klausul grup litecene yang valid:
(hello world)(engineer* "developer* productivity"~10)Klausa kelompok sebagian besar digunakan untuk mengklarifikasi pertanyaan kompleks yang mengandung banyak dan dan atau klausa.
Klausa dan klausa adalah klausa pencarian litecene yang valid diikuti oleh kata kunci AND diikuti oleh klausa pencarian litecene lainnya. Multiple AND klausa dapat ditambahkan ke hal yang sama dan klausa. Dokumen yang cocok harus cocok dengan semua klausa yang diberikan. Berikut ini semua litecene dan klausa yang valid:
hello AND worldThe rain in Spain falls mainly on the plains AND "My Fair Lady"~8engineer* AND "developer productivity"~10 Klausa atau klausa pencarian litecene yang valid diikuti oleh kata kunci OR diikuti oleh klausa pencarian litecene lainnya. Beberapa OR klausa dapat ditambahkan ke hal yang sama atau klausa. Kapan dan dan atau atau klausa diselingi, AND operator mengikat lebih ketat. Klausa grup dapat digunakan untuk membuat kueri lebih jelas dan lebih mudah dipahami. Dokumen yang cocok harus cocok dengan setidaknya satu klausa yang diberikan. Berikut ini semua litecene atau klausa yang valid:
hello OR world"My Fair Lady"~8 OR Pygmalion Klausa bukan kata kunci yang NOT diikuti oleh klausa pencarian litecene lainnya. Dokumen yang cocok tidak boleh cocok dengan klausa yang diberikan. Berikut ini semua litcene yang valid bukan klausul:
NOT helloNOT "hello, world!"NOT (engineer* AND "developer productivity"~10) Beberapa backend kueri tidak mengizinkan kueri yang hanya berisi NOT klausa.
Untuk contoh cara menggunakan litecene di aplikasi Anda, lihat readme untuk penyimpanan data aplikasi Anda.
Integrasi penyimpanan data baru memiliki dua bagian: transpiler kueri yang mengubah objek Query litecene menjadi sintaks asli penyimpanan data; dan metode untuk menyiapkan teks di penyimpanan data untuk dicari. Kedua komponen ini harus bekerja bersama untuk mengimplementasikan semantik pencarian yang benar.
Misalnya, integrasi penyimpanan data BigQuery hanya mencari surat dan angka Latin ASCII. Oleh karena itu, kueri harus diproses untuk menangani karakter yang tidak diteliti dengan tepat sebelum dapat dikonversi menjadi predikat SQL, dan data dalam penyimpanan data harus diproses untuk menghilangkan karakter yang tidak dicari, dan kedua pemrosesan ini harus dilakukan sedemikian rupa sehingga mereka setuju satu sama lain.
Backend integrasi data baru harus mengimplementasikan penolong untuk membangun pipa analisis kueri yang disarankan dan pendekatan yang disarankan untuk preprocessing data.
Litecene mengimplementasikan jalur pipa berikut untuk memungkinkan pengembang integrasi penyimpanan data membangun aturan pemrosesan yang kompleks dengan cepat dan mudah.
Litecene melihat semua teks kueri sebagai urutan titik kode. CodePointStream adalah urutan titik -titik kode yang dipesan. Core litecene berisi filter titik kode berikut:
SmartQuotesCodePointFilter - Mengonversi "Kutipan Cerdas" menjadi "Kutipan Lurus"Filter titik kode dapat memetakan satu titik kode ke yang lain, tetapi tidak dapat menambah atau menghapus titik kode.
Litecene menggunakan tokenisasi untuk mengubah titik kode menjadi token. TokenStream adalah urutan token yang dipesan. Core litecene berisi filter token berikut:
LetterNumberTokenFilter -Mengganti semua karakter non-alfanumerik dengan spasi putih. Surat dan angka kategori Unicode digunakan untuk mendefinisikan teks alfanumerik.LowercaseTokenFilter - Mengubah semua teks menjadi huruf kecil.NormalizeTokenFilter - melakukan normalisasi NFKD unicode pada teks dan menghilangkan semua karakter tanda unicode.PrintableAsciiTokenFilter -Mengganti semua karakter tidak dalam 0x20-0x7E dengan whitespace.Filter token dapat membuat perubahan sewenang -wenang pada teks token, tetapi tidak dapat menambah atau menghapus token.
Litecene memungkinkan transformasi kueri sewenang -wenang menggunakan QueryPipeline . Core litecene berisi pipa kueri berikut:
SimplifyQueryFilterPipeline - merestrukturisasi kueri untuk menghapus istilah "kosong" (misalnya, istilah tanpa teks) dan menyederhanakan logika (misalnya, gabungan yang berdekatan dan kueri) Peta jalan Litecene selalu tersedia di sini. Silakan membuka atau mengomentari masalah jika Anda memiliki umpan balik!