Dies ist ein Volltextsuche -Flutter -Plugin, das auf Tantivy aufbaut.
Tantivy ist eine von Apache Lucene inspirierte und in Rost geschriebene Suchmaschinenbibliothek.
Das Schema beschreibt den Typ (String, Text, U64) eines Feldes sowie die Art und Weise, wie er behandelt werden sollte.
Schema -Feldtyp unterstützt:
| Feldtyp | Beschreibung |
|---|---|
| Saite | String -Feldtypkonfiguration |
| Text | Textfeldtypkonfiguration |
| U64 | Nicht signierte 64-Bit-Ganzzahlen Feldtypkonfiguration |
| i64 | Signierte 64-Bit-Ganzzahlen 64 Feldtypkonfiguration |
| F64 | 64-Bit Float 64 Feldtypkonfiguration |
| Datum | Signierte 64-Bit-Datum der Feldtypkonfiguration |
| Facette | Hierachische Facette |
| Bytes | Bytes (eine pro Dokument) |
Betreiber mögen und , oder , um in Großbuchstaben zu sein
Einfache Begriffe : "EG: Barack Obama werden einfach mit Tantivys SimpleTokenizer tokenisiert, weshalb [" Barack "," Obama "].
ZB, wenn Körper und Titel Standardfelder sind, sind unsere Beispielbegriffe ["Titel: Barack", "Body: Barack", "Titel: Obama", "Body: Obama"]. Standardmäßig sind alle tokenisierten und indizierten Felder Standardfelder.
Mehrere Begriffe werden als OR behandelt: Jedes Dokument, das mindestens einen der Laufzeiten enthält, durchläuft die Bewertung.
Dieses Verhalten ist langsamer, aber keine schlechte Idee, wenn der Benutzer nach Relevanz sortiert: Der Benutzer scannt normalerweise nur die ersten Dokumente, um die Relevanz zu verringern, und hört auf, wenn die Dokumente nicht mehr relevant sind.
Boolesche Betreiber : und, oder. Und nimmt Vorrang vor oder, so dass a und b oder c als (a und b) oder c interpretiert wird.
Zusätzlich zu den Booleschen Betreibern kann das -, + helfen, zu definieren. Diese Betreiber reichen aus, um alle Abfragen mit Booleschen Betreibern auszudrücken. Zum Beispiel können x und y oder z geschrieben werden (( +x +y) z). Darüber hinaus können diese Betreiber dazu beitragen, "erforderliche optionale" Abfragen zu definieren. (+xy) entspricht demselben Dokument, das einfach X ist, aber y hilft, die Punktzahl zu verfeinern.
Negative Begriffe : Durch die Vorbereitung eines Terms nach einem -kann ein Begriff von der Suche ausgeschlossen werden. Dies ist nützlich, um eine Abfrage zu zerstören. zB Apple -fruit
MUSS AUSGEBEN : Durch die Vorbereitung einer Laufzeit nach einem +kann für die Suche ein Begriff erforderlich sein.
Phrasenbegriffe : Zitierte Begriffe werden zu Phrasensuche auf Feldern, die Positionen indexiert haben. ZB, Titel: "Barack Obama" wird nur Dokumente finden, die "Barack" unmittelbar "Obama" haben.
Reichweite : Bereichsuche kann durch Angabe der Start- und Endgrenze durchgeführt werden. Diese können inklusiv oder exklusiv sein. ZB, Titel: [A bis C} wird alle Dokumente finden, deren Titel ein Wort lexikographisch zwischen A und C enthält (inklusive Untergrenze der Untergrenze, exklusive Obergrenze). Inklusive Grenzen sind [], exklusiv sind {}.
Datumwerte : Der Abfrage -Parser unterstützt die formatierten RFC3339 -Daten. Zum Beispiel "2002-10-02T15: 00: 00.05Z"
Alle Dokumente Abfrage : Eine Ebene * stimmt mit allen Dokumenten im Index überein.
/// 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 );
