これは、Tantivyの上に構築された全文検索フラッタープラグインです。
Tantivyは、Apache Luceneに触発され、Rustで書かれたフルテキスト検索エンジンライブラリです。
スキーマは、フィールドのタイプ(文字列、テキスト、U64)と、どのように処理するかを説明しています。
スキーマフィールドタイプがサポートされています:
| フィールドタイプ | 説明 |
|---|---|
| 弦 | 文字列フィールドタイプ構成 |
| 文章 | テキストフィールドタイプの構成 |
| U64 | 署名されていない64ビット整数フィールドタイプ構成 |
| i64 | 署名64ビット整数64フィールドタイプ構成 |
| F64 | 64ビットフロート64フィールドタイプ構成 |
| 日付 | 署名された64ビットの日付フィールドタイプ構成 |
| ファセット | 科学的なファセット |
| バイト | バイト(ドキュメントごとに1つ) |
のようなオペレーター、または、大文字である必要があります
単純な用語:「例:バラク・オバマは、TantivyのSimpleTokenizerを使用して単純に象徴されているため、["Barack"、 "Obama"]になります。その後、クエリパーサーのデフォルト条件内で条件が検索されます。
たとえば、ボディとタイトルがデフォルトフィールドである場合、例の用語は[「タイトル:バラク」、「ボディ:バラク」、「タイトル:オバマ」、「ボディ:オバマ」です。デフォルトでは、すべてのトークン化およびインデックス化されたフィールドはデフォルトフィールドです。
複数の用語は、または次のように処理されます。少なくとも1つの用語を含むドキュメントは、スコアリングを経ます。
この動作は遅くなりますが、ユーザーが関連性によってソートされている場合、悪い考えではありません。ユーザーは通常、関連性を低下させる順に最初のいくつかのドキュメントをスキャンし、ドキュメントがもはや関連性がない場合に停止します。
ブールオペレーター:およびまたは。 AおよびBまたはCが(AおよびB)またはCとして解釈されるように、優先順位を取得します。
ブール演算子に加えて、 - 、 +は定義を支援できます。これらの演算子は、ブールの演算子を使用してすべてのクエリを表現するのに十分です。たとえば、xとyまたはzを記述できます(( +x +y)z)。さらに、これらの演算子は、「必要なオプションの」クエリを定義するのに役立ちます。 (+xy)xと同じドキュメントセットと一致しますが、yはスコアの洗練に役立ちます。
否定的な用語:用語をA-によって準備することにより、用語を検索から除外できます。これは、クエリを掘り下げるのに役立ちます。例:Apple-フルーツ
用語:A +によって用語を準備することにより、検索に用語を必要とすることができます。
フレーズ用語:引用された用語は、ポジションがインデックス化されているフィールドでのフレーズ検索になります。たとえば、タイトル:「バラク・オバマ」は、「バラク」がすぐに「オバマ」が続く文書のみを見つけます。
範囲の用語:範囲検索は、開始とエンドバウンドを指定することで実行できます。これらは包括的または排他的です。たとえば、タイトル:[aからc}は、タイトルがAとCの間に単語辞書を含むすべてのドキュメントを見つけます(包括的下限、排他的上限)。包括的境界は[]、排他的です{}です。
日付値:クエリパーサーは、RFC3339フォーマットされた日付をサポートします。たとえば、「2002-10-02T15:00:00.05Z」
すべてのドキュメントクエリ:プレーン *は、インデックス内のすべてのドキュメントと一致します。
/// create a instance of SearchEngine and set it up
final engine = SearchEngine ();
SearchEngine . setup ();
/// get the path which used to store index files
final _path = await getApplicationDocumentsDirectory ().path;
/// define the schema of the data which wanted to be indexed
final _schema = r'{"id": "i64", "timestamp": "date", "content": "text"}' ;
/// open a exists one or create a new one on the device
engine. openOrCreate (_path, _schema);
/// encode the data object to a json string
final _doc = jsonEncode (dataObject);
/// start to index and store the data
await engine. index (_doc);
/// give the query keywords and the field which to search on
final res = await engine. search ( '关键字 关键词' , [ 'content' ], 1 , 10 );
/// remove a specify document by giving a field of u64 and it's value
/// document can't be deleted by text field, please use string field
await engine. deleteByU64 ( 'id' , 141906710246850560 );
