# Remote Backend Protocol

This is a brief description of the wire protocol used by the remote backend. This should be up to date for protocol version 20, but hasn't been thoroughly checked yet:

    Message 1:
    Direction: Server->Client
    Format: OM <protocol version> <document count> <average length>
    Description: Identifies protocol version and sends basic statistics.
    When: At connection setting up time.

    Message 2:
    Direction: Client->Server
    Format: Q<serialised query string>
            <options>
    	<weighting>
    	<R-set>
    Description: The query, options, weighting formula and parameters, and R-set.
    When: At prepare_match() time

    Message 3:
    Direction: Server->Client
    Format: L<serialised local stats>
    Description: The local database statistics

    Message 4:
    Direction: Client->Server
    Format: G<serialised global stats>
            M<first item> <max items>
    Description: The global statistics for all databases are sent,
    	     and the MSet requested.
    When: At get_mset() time.

    Message 5:
    Direction: Server->Client
    Format: O<first> <lower bound> <estimated> <upper bound> <max_possible> <max_attained>\
            <#items> [<weight> <doc id> <collapse key value>]...\
            [<term> <frequency> <weight>]...
    Description: The returned MSet.

    Message KeepAlive:
    Direction: Client->Server
    Format: K
    Description: Dummy message to stop the connection timing out.

    Message KeepAliveResponse
    Direction: Server->Client
    Format: OK
    Description: Dummy message to stop the connection timing out.

    Message TermlistRequest:
    Direction: Client->Server
    Format: T<docid>
    Description: The docid of the document we wish to get the termlist for.

    Message TermlistResponse:
    Direction: Server->Client
    Format: [<within document frequency of term> <term frequency> term]
            ...
            Z

    Message GetDocumentRequest:
    Direction: Client->Server
    Format: D<docid>
    Descrption: The docid of the document we wish to get.

    Message GetDocumentResponse:
    Direction: Server->Client
    Format: O<data from the document, encoded using encode_tname>
            <value number> <value string, encoded using encode_tname>
    	...
            Z