Este é um plug -in fletter de pesquisa de texto completo que se baseia em Tantivy.
Tantivy é uma biblioteca de mecanismo de pesquisa de texto completo inspirado no Apache Lucene e escrito em Rust.
O esquema descreve o tipo (string, texto, U64) de um campo, bem como como ele deve ser tratado.
Tipo de campo de esquema suportado:
| Tipo de campo | Descrição |
|---|---|
| corda | Configuração do tipo de campo da string |
| texto | Configuração do tipo de campo de texto |
| U64 | Configuração de campo de campo inteiros não assinado de 64 bits |
| i64 | Configuração do tipo de campo de 64 bits assinado 64 bits 64 |
| F64 | Configuração do tipo de campo de 64 bits 64 |
| data | Configuração do tipo de campo de 64 bits de 64 bits |
| faceta | Facet Hierachical |
| bytes | Bytes (um por documento) |
Operadores como e , ou , devem estar em maiúsculas
Termos simples : "Por exemplo: Barack Obama é simplesmente tokenizado usando o SimpleTokenizer de Tantivy, tornando -se [" Barack "," Obama "]. Os termos são pesquisados nos termos padrão do analisador de consulta.
Por exemplo, se o corpo e o título são campos padrão, nossos termos de exemplo são ["Título: Barack", "Body: Barack", "Título: Obama", "Body: Obama"]. Por padrão, todos os campos tokenizados e indexados são campos padrão.
Vários termos são tratados como um: qualquer documento que contenha pelo menos um dos termos passará pela pontuação.
Esse comportamento é mais lento, mas não é uma má idéia se o usuário estiver classificando por relevância: o usuário normalmente apenas digitaliza os primeiros documentos em ordem de diminuição da relevância e parar quando os documentos não forem mais relevantes.
operadores booleanos : e, ou. E tem precedência sobre ou, para que A e B ou C seja interpretado como (a e b) ou c.
Além dos operadores booleanos , o -, + pode ajudar a definir. Esses operadores são suficientes para expressar todas as consultas usando operadores booleanos. Por exemplo, xe y ou z pode ser escrito (( +x +y) z). Além disso, esses operadores podem ajudar a definir consultas "necessárias opcionais". (+xy) corresponde ao mesmo documento definido como simplesmente x, mas Y ajudará a refinar a pontuação.
Termos negativos : ao pré -prever um termo por a -, um termo pode ser excluído da pesquisa. Isso é útil para desambiguar uma consulta. por exemplo, maçã -frut
Termos deve : Ao pré -pré -estar por A +, um termo pode ser feito necessário para a pesquisa.
Termos da frase : os termos cotados tornam -se pesquisas de frase nos campos que têm posições indexadas. Por exemplo, título: "Barack Obama" encontrará apenas documentos que "Barack" imediatamente seguidos por "Obama".
Termos de intervalo : as pesquisas de intervalo podem ser feitas especificando o limite inicial e final. Estes podem ser inclusivos ou exclusivos. Por exemplo, título: [a a c} encontrará todos os documentos cujo título contém uma palavra lexicograficamente entre A e C (limite inferior inclusivo, limite superior exclusivo). Os limites inclusivos são [], exclusivos são {}.
Valores da data : o analisador de consulta suporta datas formatadas RFC3339. Por exemplo, "2002-10-02T15: 00: 00.05z"
Todos os documentos consulta : um simples * corresponderá a todos os documentos no índice.
/// 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 );
