這是一個完整的搜索拼圖插件,該插件構建在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 );
