Il s'agit d'un plugin Fluzter de recherche de texte intégral qui s'appuie sur Tantivy.
Tantivy est une bibliothèque de moteurs de recherche en texte intégral inspirée d'Apache Lucene et écrite en rouille.
Le schéma décrit le type (chaîne, texte, U64) d'un champ ainsi que la façon dont il doit être géré.
Type de champ de schéma pris en charge:
| Type de terrain | Description |
|---|---|
| chaîne | Configuration de type de champ de chaîne |
| texte | Configuration de type de champ de texte |
| U64 | Configuration de type de champ entières de 64 bits non signé |
| i64 | Configuration de type de champ 64 bits signé 64 |
| F64 | Configuration du type de champ 64 bits 64 |
| date | Configuration du type de champ de date de 64 bits signé |
| facette | Facette hiérachique |
| octets | Octets (un par document) |
Des opérateurs comme et , ou , doivent être en majuscules
Termes simples : "EG: Barack Obama est simplement tokenisé à l'aide de Simpletokizer de Tantivy, devenant ainsi [" Barack "," Obama "]. Les termes sont ensuite recherchés dans les termes par défaut de l'analyseur de requête.
Par exemple, si le corps et le titre sont des champs par défaut, nos exemples de termes sont ["Title: Barack", "Body: Barack", "Title: Obama", "Body: Obama"]. Par défaut, tous les champs tokenisés et indexés sont des champs par défaut.
Plusieurs termes sont gérés par ou: tout document contenant au moins un du terme passera par le score.
Ce comportement est plus lent, mais n'est pas une mauvaise idée si l'utilisateur triage par pertinence: l'utilisateur analyse généralement les premiers documents dans l'ordre de la pertinence décroissante et s'arrêtera lorsque les documents ne sont plus pertinents.
Opérateurs booléens : et, ou. Et a priorité sur ou, de sorte que A et B ou C sont interprétés comme (A et B) ou c.
En plus des opérateurs booléens , le -, + peut aider à définir. Ces opérateurs sont suffisants pour exprimer toutes les requêtes à l'aide d'opérateurs booléens. Par exemple, x et y ou z peuvent être écrits ((+ x + y) z). De plus, ces opérateurs peuvent aider à définir les requêtes "en option" requises. (+ xy) correspond au même ensemble de documents que Simply X, mais Y aidera à affiner le score.
Termes négatifs : En ajoutant un terme par A -, un terme peut être exclu de la recherche. Ceci est utile pour désambigir une requête. Par exemple, Fruit Apple
DOIT TERMES : En ajoutant un terme par A +, un terme peut être fait requis pour la recherche.
Termères de phrase : Les termes cités deviennent des recherches d'expression sur des champs qui ont des positions indexées. Par exemple, titre: "Barack Obama" ne trouvera que des documents qui ont "Barack" immédiatement suivi de "Obama".
Termes de plage : les recherches de plages peuvent être effectuées en spécifiant la limite de début et de fin. Ceux-ci peuvent être inclusifs ou exclusifs. Par exemple, titre: [a à c} trouvera tous les documents dont le titre contient un mot lexicogramme entre A et C (Bound inférieur inclusif, limite supérieure exclusive). Les limites inclusives sont [], exclusives sont {}.
Valeurs de date : l'analyseur de requête prend en charge les dates formatées RFC3339. Par exemple, "2002-10-02T15: 00: 00.05Z"
Toutes les documents Docs : une plaine * correspondra à tous les documents de l'index.
/// 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 );
