这是一个完整的搜索拼图插件,该插件构建在Tantivy上。
Tantivy是一个全文搜索引擎库,灵感来自Apache Lucene并用Rust撰写。
该模式描述了字段的类型(字符串,文本,U64)以及应如何处理。
支持的模式字段类型:
| 字段类型 | 描述 |
|---|---|
| 细绳 | 字符串字段类型配置 |
| 文本 | 文本字段类型配置 |
| U64 | 未签名的64位整数字段类型配置 |
| i64 | 签名的64位整数64字段类型配置 |
| F64 | 64位Float 64字段类型配置 |
| 日期 | 签名的64位日期字段类型配置 |
| 方面 | 层面 |
| 字节 | 字节(每个文档一个) |
运算符,例如和或必须在大写中
简单的术语:“例如:巴拉克·奥巴马(Barack Obama)仅使用tantivy的简单词来使人化为象征,从而成为[“ barack”,“ obama”]。然后在查询解析器的默认术语中搜索这些术语。
例如,如果身体和标题是默认字段,我们的示例术语是[“标题:Barack”,“ Body:Barack”,“ Title:Obama”,“ Body:Obama”]。默认情况下,所有令牌化和索引字段都是默认字段。
多个术语被处理为一个或:任何包含该术语中至少一个的文档都将通过评分。
此行为较慢,但是如果用户通过相关性进行排序,这并不是一个坏主意:用户通常只是在前几个文档中扫描,以减少相关性,并且当文档不再相关时会停止。
布尔运营商:和或。并优先考虑A和B或C被解释为(A和B)或C。
除布尔运营商外, - +还可以帮助定义。这些操作员足以使用布尔操作员表达所有查询。例如X和Y或Z可以写(( +X +Y)Z)。此外,这些操作员可以帮助定义“必需的可选”查询。 (+xy)匹配与简单X的同一文档集,但Y将有助于完善分数。
负术语:通过a - 可以从搜索中排除一个术语。这对于消除查询很有用。例如,苹果果
必须术语:通过按A +准备任期,可以为搜索提供一个术语。
短语术语:引用术语成为具有索引位置的字段上的短语搜索。例如,标题:“ Barack Obama”只会找到立即带有“ Barack”的文件。
范围术语:可以通过指定开始和结束界限来完成范围搜索。这些可能是包容的或排他性的。例如,标题:[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 );
