Lucilla est une bibliothèque de recherche de texte intégral en mémoire pour Kotlin.
Il vous permet de créer un index de recherche de texte intégral des données qui n'ont pas besoin d'être persistées dans une base de données. Vous pouvez exécuter des requêtes de recherche par rapport à l'index pour trouver rapidement des documents correspondants.
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 est en développement actif. C'est un prototype à un stade précoce, et ne convient pas encore à l'utilisation de la production.
Bien que Lucilla vous ait couvert sur la plupart des fonctionnalités de base, la prise en charge de certaines fonctionnalités avancées est manquante (mais planifiée):
Pour utiliser les capacités FTS de Lucilla, vous devez d'abord modéliser vos données en classe.
Nous vous recommandons d'utiliser des classes de données à cet effet, mais tout devrait fonctionner tant qu'il satisfait aux exigences suivantes:
@Id qui peut être analysé comme un IntString S import com.haroldadmin.lucilla.core.Id
data class Book (
@Id
val id : Int ,
val title : String ,
val summary : String ,
) Si vous ne voulez pas que Lucilla indexent certains champs de votre document, annotez-les avec @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 ,
)Créez un index FTS et ajoutez-y vos données:
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)L'ajout de documents à l'index ou la création de l'index avec des données de graines est un processus potentiellement coûteux en fonction de la taille de chaque document. Il est préférable d'effectuer ce processus sur un fil d'arrière-plan ou une coroutine.
Envoyez vos requêtes à l'index pour obtenir les résultats de recherche commandés par pertinence.
val searchResults = index.search(query)
val books = searchResults.map { r -> r.documentId }.map { id -> getBook(id) }
showResults(books)Lucilla exécute chaque requête de recherche via un pipeline de traitement de texte pour en extraire des jetons consultables. Les jetons peuvent ne pas refléter exactement la requête de recherche. Pour trouver quel jeton de votre requête de recherche correspond à un résultat de recherche donné, utilisez la propriété "Matchterm" sur un résultat de recherche.
Ajoutez le référentiel Jitpack à votre liste de référentiels:
// Project level build.gradle file
allprojects {
repositories {
maven { url ' https://jitpack.io ' }
}
}Puis ajoutez la dépendance dans votre fichier gradle:
// Module build.gradle file
dependencies {
implementation " com.github.haroldadmin.lucilla:core:(latest-version) "
}Lucilla est en développement actif et ne promet pas la stabilité de l'API. Attendez-vous à ce que la bibliothèque subisse des modifications importantes avant d'atteindre le statut stable.
Nous encourageons la communauté à apporter des fonctionnalités et à signaler des bogues.
Le nom «Lucilla» est inspiré du nom de Ferrari 2020 de Sebastian Vettel. Il ressemble également à Lucene (d'Apache Lucene), qui est le cadre de recherche de texte complet standard de l'industrie.
La mise en œuvre de Lucilla emprunte à un MinISEarch de la bibliothèque 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.