Solr -> Xapian ?

Stephan Bosch stephan at rename-it.nl
Sun Jan 6 02:43:05 EET 2019


Op 06/01/2019 om 01:00 schreef Joan Moreau:
> Anyone willing to explain those functions ?
>
> Most notably " get_last_uid"

 From src/plugins/fts/fts-api.h:

/* Get the last_uid for the mailbox. */
int fts_backend_get_last_uid(struct fts_backend *backend, struct mailbox 
*box,
                  uint32_t *last_uid_r);

The solr sources ( src/plugins/fts-solr/fts-backend-solr.c:213) tell me 
this returns the last UID added to the index for the given mailbox and 
FTS index.

> "set_build_key"

 From src/plugins/fts/fts-api.h:

/* Switch to building index for specified key. If backend doesn't want to
    index this key, it can return FALSE and caller will skip to next key. */
bool fts_backend_update_set_build_key(struct fts_backend_update_context 
*ctx,
                       const struct fts_backend_build_key *key);

Same file provides outline of what a build_key is.

> "build_more" ,

/* Add more content to the index for the currently specified build key.
    Non-BODY_PART_BINARY data must contain only full valid UTF-8 characters,
    but it doesn't need to be NUL-terminated. size contains the data size in
    bytes, not characters. This function may be called many times and 
the data
    block sizes may be small. Backend returns 0 if ok, -1 if build should be
    aborted. */
int fts_backend_update_build_more(struct fts_backend_update_context *ctx,
                   const unsigned char *data, size_t size);

You should look at the sources of a few backends like squat and solr to 
get a feel of what exactly this is doing.

> what is refresh versus rescan ?

 From fts-api.h:

/* Refresh index to make sure we see latest changes from lookups.
    Returns 0 if ok, -1 if error. */
int fts_backend_refresh(struct fts_backend *backend);
/* Go through the entire index and make sure all mails are indexed,
    and delete any extra mails in the index. */
int fts_backend_rescan(struct fts_backend *backend);

Regards,


Stepham


>
>
> On January 5, 2019 14:23:10 Joan Moreau via dovecot 
> <dovecot at dovecot.org> wrote:
>
>> Thank Stephan
>>
>> I basically need to know the role/description of each of the 
>> functions of the fts_backend:
>>
>>
>> struct fts_backend fts_backend_xapian = {
>> .name = "xapian",
>> .flags = FTS_BACKEND_FLAG_NORMALIZE_INPUT,*-> what other flags ?*
>>
>> {
>> fts_backend_xapian_alloc,
>> fts_backend_xapian_init,
>> fts_backend_xapian_deinit,
>> fts_backend_xapian_get_last_uid,
>> fts_backend_xapian_update_init,
>> fts_backend_xapian_update_deinit,
>> fts_backend_xapian_update_set_mailbox,
>> fts_backend_xapian_update_expunge,
>> fts_backend_xapian_update_set_build_key,
>> fts_backend_xapian_update_unset_build_key,
>> fts_backend_xapian_update_build_more,
>> fts_backend_xapian_refresh,
>> fts_backend_xapian_rescan,
>> fts_backend_xapian_optimize,
>> fts_backend_default_can_lookup,
>> fts_backend_xapian_lookup,
>> fts_backend_xapian_lookup_multi,
>> fts_backend_xapian_lookup_done
>> }
>> };
>>
>>
>> THank you
>>
>> On 2019-01-05 08:49, Stephan Bosch wrote:
>>
>>>
>>> Op 04/01/2019 om 11:17 schreef Joan Moreau via dovecot:
>>>>
>>>> Why not, but please guide me about the core structure (mandatory 
>>>> funcitons, etc..) of a typical Dovecot FTS plugin
>>>>
>>> The Dovecot API documentation is not exhaustive everywhere, but the 
>>> basics are documented. The remaining questions can be answered by 
>>> looking at examples found in similar plugins or the relevant API 
>>> sources.
>>>
>>> I know of one FTS plugin not written by Dovecot developers:
>>>
>>> https://github.com/atkinsj/fts-elasticsearch
>>>
>>> If you really wish to do something like this, just go ahead. It will 
>>> not be a small effort though. As soon as you have concrete 
>>> questions, we can help you (don't expect rapid responses though).
>>>
>>> Regards,
>>>
>>> Stephan.
>>>
>>>
>>>
>
>


More information about the dovecot mailing list