Люсилла-это библиотека полного текста в памяти для Котлина.
Это позволяет вам создать полный индекс текстового поиска для данных, которые не необходимо сохранять в базе данных. Вы можете запустить поисковые запросы против индекса, чтобы быстро найти соответствующие документы.
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's FTS, вы должны сначала моделировать свои данные в качестве класса.
Мы рекомендуем использовать классы данных для этой цели, но все должно работать до тех пор, пока оно удовлетворяет следующие требования:
@Id , которое можно проанализировать как IntString import com.haroldadmin.lucilla.core.Id
data class Book (
@Id
val id : Int ,
val title : String ,
val summary : String ,
) Если вы не хотите, чтобы Люсилла индексировала некоторые поля вашего документа, аннотируйте их @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 ,
)Создайте индекс FTS и добавьте в него свои данные:
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)Добавление документов в индекс или создание индекса с помощью данных семян является потенциально дорогостоящим процессом в зависимости от того, насколько велик каждый документ. Лучше всего выполнить этот процесс на фоновом потоке или Coroutine.
Отправьте свои запросы в индекс, чтобы получить результаты поиска, заказанные по актуальности.
val searchResults = index.search(query)
val books = searchResults.map { r -> r.documentId }.map { id -> getBook(id) }
showResults(books)Люсилла запускает каждый поисковый запрос через текстовый конвейер обработки, чтобы извлечь из него токены для поиска. Токены могут не отражать поисковый запрос точно. Чтобы найти, какой токен вашего поискового запроса сочетается с данным результатом поиска, используйте свойство «Matchterm» в результате поиска.
Добавьте хранилище Jitpack в свой список репозиториев:
// Project level build.gradle file
allprojects {
repositories {
maven { url ' https://jitpack.io ' }
}
}А затем добавьте зависимость в вашем файле Gradle:
// Module build.gradle file
dependencies {
implementation " com.github.haroldadmin.lucilla:core:(latest-version) "
}Люсилла находится в активном развитии и не обещает стабильность API. Ожидайте, что библиотека будет претерпевать значительные изменения, прежде чем она достигнет стабильного статуса.
Мы призываем сообщество вносить функции и сообщать об ошибках.
Название «Люсилла» вдохновлено именем Ferrari Себастьяна Феттеля 2020 года. Это также звучит похоже на Lucene (от Apache Lucene), который является отраслевой стандартной структурой полного текста.
Реализация Люсиллы заимствует из MiniSearch библиотеки 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.