Это полный плагин с полным текстовым поиском, который опирается на расторг.
Tantivy-это полнотекстовая библиотека поисковой системы, вдохновленная Apache Lucene и написанная в Rust.
Схема описывает тип (строка, текст, U64) поля, а также то, как с ним следует обрабатывать.
Поддерживается тип поля схемы:
| Тип поля | Описание |
|---|---|
| нить | Конфигурация типа поля строки |
| текст | Конфигурация типа текста текста |
| U64 | Unsigned 64-битный целый intgers |
| I64 | Подписанные 64-битные целые числа 64 Полевая конфигурация типа поля конфигурация |
| F64 | 64-бит Float 64 Тип поля конфигурация |
| дата | Подписано 64-битная дата конфигурация поля типа |
| аспект | Иерахический аспект |
| байты | Байты (один на документ) |
Операторы, такие как и , или , должны быть в прописных
Простые термины : «Например: Барак Обама просто токенизируется с использованием SimpleTokenizer Tantivy, следовательно, становясь [« Бараком »,« Обамой »]. Затем термины ищут в условиях анализа« Проводник запроса ».
Например, если тело и заголовок являются полями по умолчанию, наши примеры термины: «Название: Барак», «Тело: Барак», «Название: Обама», «Тело: Обама»]. По умолчанию все токеновые и индексированные поля являются полями по умолчанию.
Несколько терминов обрабатываются как или: любой документ, содержащий по крайней мере один из терминов, пройдет через оценку.
Это поведение медленнее, но не является плохой идеей, если пользователь сортирует по релевантности: пользователь обычно просто сканирует первые несколько документов в порядке уменьшения актуальности и останавливается, когда документы больше не имеют отношения.
Логические операторы : и, или. И имеет приоритет над или, чтобы A и B или C интерпретируются как (A и B) или c.
В дополнение к логическим операторам , - + + может помочь определить. Этим операторам достаточно, чтобы выразить все запросы, используя логические операторы. Например, x и y или z могут быть записаны (( +x +y) z). Кроме того, эти операторы могут помочь определить «необходимые дополнительные» запросы. (+xy) соответствует тому же документу, установленному как просто X, но Y поможет усовершенствовать счет.
Отрицательные термины : с приготовлением термина к -, термин может быть исключен из поиска. Это полезно для устранения диссолюции запроса. например, Apple -fruit
Необходимо термины : с приготовлением термина к +, термин может быть сделан для поиска.
Термины фразы : Цитируемые термины становятся поисковыми поиском фразы на областях, в которых индексированные позиции. Например, название: «Барак Обама» найдет только документы, в которых «Барак» сразу же за ним следует «Обама».
Условия диапазона : Поиск диапазона может быть выполнен путем указания начала и конечной границы. Они могут быть инклюзивными или эксклюзивными. Например, заголовок: [от A до C} найдет все документы, название которого содержит слово Lexicographally между 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 );
