Lucillaは、Kotlinのメモリー内のフルテキスト検索ライブラリです。
これにより、データベースに持続する必要のないデータの全文検索インデックスを作成できます。インデックスに対して検索クエリを実行して、一致するドキュメントをすばやく見つけることができます。
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は積極的な開発中です。これは初期段階のプロトタイプであり、生産の使用にはまだ適していません。
Lucillaは基本的な機能のほとんどをカバーしていますが、いくつかの高度な機能のサポートは欠落しています(ただし、計画されています)。
LucillaのFTS機能を使用するには、まずデータをクラスとしてモデル化する必要があります。
この目的のためにデータクラスを使用することをお勧めしますが、次の要件を満たす限り、何でも機能するはずです。
Intとして解析できる@Idマークされたフィールドが必要ですString列として解析できる1つ以上の他のプロパティが必要です import com.haroldadmin.lucilla.core.Id
data class Book (
@Id
val id : Int ,
val title : String ,
val summary : String ,
) Lucillaにドキュメントのいくつかのフィールドにインデックスを付けたくない場合は、 @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)Lucillaは、テキスト処理パイプラインを介してすべての検索クエリを実行して、検索可能なトークンを抽出します。トークンは、検索クエリを正確に反映していない場合があります。特定の検索結果と一致する検索クエリのトークンを見つけるには、検索結果に「一致」プロパティを使用します。
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) "
}Lucillaは積極的な開発中であり、APIの安定性を約束しません。ライブラリが安定した状態になる前に、ライブラリが大幅に変更を受けることを期待してください。
コミュニティに機能を提供し、バグを報告することをお勧めします。
「ルシラ」という名前は、セバスチャン・ベッテルの2020年のフェラーリの名前からインスピレーションを受けています。また、業界標準の全文検索フレームワークであるLucene (Apache Luceneから)に似ています。
Lucillaの実装は、JavaScript Library Minisearchから借用しています。
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.