O gerenciamento de linha do tempo oferece duas operações em um TimelineStore: search e flush. A operação search consulta dados da linha do tempo por meio do índice de pesquisa do Tablestore, enquanto a operação flush conclui as solicitações de gravação pendentes no buffer de gravação em lote.
Search
O gerenciamento de linha do tempo baseia seu recurso de consulta na API Search do índice de pesquisa, que fornece funcionalidades como consulta difusa e consulta com múltiplas condições.
A operação search tem suporte apenas para um TimelineStore com IndexSchema configurado.
Ao configurar o IndexSchema de um TimelineStore, observe os seguintes requisitos para os campos indexados:
Tipos de dados — Os campos indexados aceitam tipos de dados como LONG, DOUBLE, BOOLEAN, KEYWORD, GEO_POINT e TEXT.
Propriedades de campo — As propriedades incluem Index, Store e Array, além do tipo de tokenizador. Essas propriedades têm os mesmos significados do índice de pesquisa. Para mais detalhes, consulte Data types.
Consulta difusa — Configure os campos desejados para consulta difusa como o tipo TEXT e defina o tipo de tokenizador necessário. Para obter mais informações sobre tokenização, consulte Tokenization. A operação search aceita duas formas de entrada, e ambas chamam
timelineStore.search. Para corresponder um campo a um valor com uma expressão de condição, passe umSearchParameter:
/**
* Search timeline by SearchParameter.
* */
SearchParameter searchParameter = new SearchParameter(
field("text").equals("fieldValue")
);
timelineStore.search(searchParameter);
Para passar um objeto de consulta como TermQuery e limitar o número de resultados com setLimit, use um SearchQuery:
/**
* Search timeline by SearchQuery.
* */
TermQuery query = new TermQuery();
query.setFieldName("text");
query.setTerm(ColumnValue.fromString("fieldValue"));
SearchQuery searchQuery = new SearchQuery().setQuery(query).setLimit(10);
timelineStore.search(searchQuery);
Gravação em lote e flush
O gerenciamento de linha do tempo implementa a gravação em lote no DefaultTableStoreWriter do SDK do Tablestore. As solicitações de gravação ainda não enviadas permanecem pendentes no buffer. Chame flush para acionar o envio dessas solicitações pendentes e aguarde sincronamente até que todas as mensagens sejam gravadas.
O código a seguir envia as mensagens pendentes no buffer e aguarda até que todas estejam armazenadas:
/**
* Flush messages in buffer, and wait until all messages are stored.
* */
timelineStore.flush();