Answer the question
In order to leave comments, you need to log in
SQLite FTS5 usage, what does xToken() do in xTokenize()?
In the sqlite interface for extensions, the fts5.h file defines the fts5_tokenizer structure, which has a pointer to the xTokenize() function
int(*xTokenize)(Fts5Tokenizer*,
void *pCtx,
int flags, /* Mask of FTS5_TOKENIZE_* flags */
const char *pText, int nText,
int(*xToken)(
void *pCtx, /* Copy of 2nd argument to xTokenize() */
int tflags, /* Mask of FTS5_TOKEN_* flags */
const char *pToken, /* Pointer to buffer containing token */
int nToken, /* Size of token in bytes */
int iStart, /* Byte offset of token within input text */
int iEnd /* Byte offset of end of token within input text */
)
);
Answer the question
In order to leave comments, you need to log in
В https://sqlite.org/fts5.html#section_7_1 ясно написано:
xTokenize:
This function is expected to tokenize the nText byte string indicated by argument pText. pText may or may not be nul-terminated. The first argument passed to this function is a pointer to an Fts5Tokenizer object returned by an earlier call to xCreate().
..........
For each token in the input string, the supplied callback xToken() must be invoked.
ВЫ пишете тройку функций xCreate, xDelete, xTokenize. При вызове вашей xTokenize ей будет передан колбэк, который, как правильно подметил abcd0x00 , нужно будет дергать для передачи движку SQLite готовой (т.е. подготовленной ВАМИ в процессе работы xTokenize) лексемы. Они называют это токен, но вообще это лексема, т.к. вы отдаете кусок из входной строки.
Итого, все максимально просто - вам дается строка, вы по своим алгоритмам и критериям решаете, где в ней какие лексемы. Для каждой найденной лексемы дергаете данный вам xToken, чтобы сообщить эту радостную новость SQLite.
нет, но если не будете вызывать, ни одной лексемы из входной строки SQLite не получит.
его реализует SQLite.
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question