Lucilla adalah perpustakaan pencarian teks lengkap dalam memori untuk Kotlin.
Ini memungkinkan Anda untuk membangun indeks pencarian teks lengkap untuk data yang tidak perlu bertahan pada database. Anda dapat menjalankan kueri pencarian terhadap indeks untuk menemukan dokumen yang cocok dengan cepat.
import com.haroldadmin.lucilla.core.*
data class Book (
@Id
val id : Int ,
val title : String ,
val summary : String ,
)
val index = useFts(getBooks())
index.search( " Martian " ).map { searchResult ->
val bookId = searchResult.documentId
val book = getBook(bookId)
// Show search result to the user
}Lucilla sedang dalam pengembangan aktif. Ini adalah prototipe tahap awal, dan belum cocok untuk penggunaan produksi.
Sementara Lucilla telah Anda membahas sebagian besar fitur dasar, dukungan untuk beberapa fitur canggih hilang (tetapi direncanakan):
Untuk menggunakan kemampuan FTS Lucilla, terlebih dahulu Anda harus memodelkan data Anda sebagai kelas.
Kami merekomendasikan menggunakan kelas data untuk tujuan ini, tetapi apa pun harus berfungsi selama itu memenuhi persyaratan berikut:
@Id yang dapat diuraikan sebagai IntString s import com.haroldadmin.lucilla.core.Id
data class Book (
@Id
val id : Int ,
val title : String ,
val summary : String ,
) Jika Anda tidak ingin Lucilla mengindeks beberapa bidang dokumen Anda, anotasi dengan @Ignore .
import com.haroldadmin.lucilla.core.Id
import com.haroldadmin.lucilla.core.Ignore
data class Book (
@Id
val id : Int ,
val title : String ,
val summary : String ,
@Ignore
val publisher : String ,
)Buat indeks FTS dan tambahkan data Anda ke dalamnya:
val index = useFts< Book >()
getBooks().forEach { index.add(it) }
// You can also pass your seed data directly
val books = getBooks()
val index = useFts< Book >(books)Menambahkan dokumen ke indeks, atau membuat indeks dengan data benih adalah proses yang berpotensi mahal tergantung pada seberapa besar setiap dokumen. Yang terbaik adalah melakukan proses ini pada utas latar belakang atau coroutine.
Kirim pertanyaan Anda ke indeks untuk mendapatkan hasil pencarian yang dipesan berdasarkan relevansi.
val searchResults = index.search(query)
val books = searchResults.map { r -> r.documentId }.map { id -> getBook(id) }
showResults(books)Lucilla menjalankan setiap kueri pencarian melalui pipa pemrosesan teks untuk mengekstrak token yang dapat dicari darinya. Token mungkin tidak mencerminkan permintaan pencarian dengan tepat. Untuk menemukan token mana dari kueri pencarian Anda yang cocok dengan hasil pencarian yang diberikan, gunakan properti "MatchterM" pada hasil pencarian.
Tambahkan Repositori Jitpack ke daftar repositori Anda:
// Project level build.gradle file
allprojects {
repositories {
maven { url ' https://jitpack.io ' }
}
}Dan kemudian tambahkan ketergantungan dalam file gradle Anda:
// Module build.gradle file
dependencies {
implementation " com.github.haroldadmin.lucilla:core:(latest-version) "
}Lucilla sedang dalam pengembangan aktif dan tidak menjanjikan stabilitas API. Harapkan perpustakaan untuk mengalami perubahan signifikan sebelum mencapai status stabil.
Kami mendorong masyarakat untuk menyumbangkan fitur dan melaporkan bug.
Nama 'Lucilla' terinspirasi dari nama Ferrari 2020 Sebastian Vettel. Ini juga terdengar mirip dengan Lucene (dari Apache Lucene), yang merupakan kerangka pencarian teks lengkap standar industri.
Implementasi Lucilla meminjam dari Minisearch Perpustakaan Javascript.
MIT License
Copyright (c) 2022 Kshitij Chauhan
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.