W
W
Whiteha2015-12-29 18:45:43
C++ / C#
Whiteha, 2015-12-29 18:45:43

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 */
        )
      );

one of whose arguments is the xToken() callback. I can't get the role of this callback from the docks and the Internet. Should we write our own here, or is it some kind of callback that the sqlite internal implementation provides? Are we obligated to call him? What does it do with our data? If we have to implement it, then how can we pass ours with the xTokenize() call, if sqlite internals provide this call?

Answer the question

In order to leave comments, you need to log in

1 answer(s)
Станислав Макаров, 2015-12-30
@Whiteha

В 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 question

Ask a Question

731 491 924 answers to any question