.. -*- rst -*-

.. highlightlang:: none

.. groonga-command
.. database: groonga-suggest-httpd

groonga-suggest-httpd
=====================

Summary
-------

groonga-suggest-httpd is a program to provide interface which accepts HTTP request and returns suggestion dataset, then saves logs for learning.
groonga-suggest-httpd behaves similar in point of view of suggestion functionality, but the name of parameter is different.

Synopsis
--------

::

  groonga-suggest-httpd [options] database_path

Usage
-----


Set up
^^^^^^

First you need to set up database for suggestion.

.. groonga-command
.. include:: ../example/reference/executables/groonga-suggest-httpd-setup.log
.. .. % groonga-suggest-create-dataset /tmp/groonga-databases/groonga-suggest-httpd query

Launch groonga-suggest-httpd
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Execute groonga-suggest-httpd command:

.. groonga-command
.. include:: ../example/reference/executables/groonga-suggest-httpd-launch.log
.. .. % groonga-suggest-httpd /tmp/groonga-databases/groonga-suggest-httpd

After executing above command, groonga-suggest-httpd accepts HTTP request on 8080 port.

If you just want to save requests into log file, use ``-l`` option.

Here is the example to save log files under ``logs`` directory with ``log`` prefix for each file.::

  % groonga-suggest-httpd -l logs/log /tmp/groonga-databases/groonga-suggest-httpd

Under ``logs`` directory, log files such as ``logYYYYmmddHHMMSS-00`` are created.

Request to groonga-suggest-httpd
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Here is the sample requests to learn ``groonga`` for ``query`` dataset::

  % curl 'http://localhost:8080/?i=127.0.0.1&l=query&s=92619&t=complete&q=g'
  % curl 'http://localhost:8080/?i=127.0.0.1&l=query&s=93850&t=complete&q=gr'
  % curl 'http://localhost:8080/?i=127.0.0.1&l=query&s=94293&t=complete&q=gro'
  % curl 'http://localhost:8080/?i=127.0.0.1&l=query&s=94734&t=complete&q=groo'
  % curl 'http://localhost:8080/?i=127.0.0.1&l=query&s=95147&t=complete&q=grooon'
  % curl 'http://localhost:8080/?i=127.0.0.1&l=query&s=95553&t=complete&q=groonga'
  % curl 'http://localhost:8080/?i=127.0.0.1&l=query&s=95959&t=submit&q=groonga

Options
-------

.. cmdoption:: -p, --port

   Specify http server port number. The default value is 8080.

.. cmdoption:: -t, --n-threads

   Specify number of threads. The default value is 8.
   This option accepts 128 as the max value, but use the number of CPU cores for
   performance.

.. cmdoption:: -s, --send-endpoint

   Specify endpoint for sender.

.. cmdoption:: -r, --receive-endpoint

   Specify endpoint for receiver.

.. cmdoption:: -l, --log-base-path

   Specify path prefix of log.

.. cmdoption:: --n-lines-per-log-file

   Specify the number of lines in a log file. The default value is 1,000,000.

.. cmdoption:: -d, --daemon

   Specify this option to daemonize.

.. cmdoption:: --disable-max-fd-check

   Specify this option to disable checking max fd on start.

Command line parameters
-----------------------

There is one required parameter - ``database_path``.

``database_path``
^^^^^^^^^^^^^^^^^^^

Specifies the path to a Groonga database. This database must be created by :doc:`groonga-suggest-create-dataset` command because it executes required initialization for suggestion.


GET parameters
--------------

groonga-suggest-httpd accepts following GET parameters.

There are required parameters which depends on type of query.

Required parameters
^^^^^^^^^^^^^^^^^^^

.. list-table::
   :header-rows: 1

   * - Key
     - Description
     - Note
   * - q
     - UTF-8 encoded string which user fills in form
     - 
   * - t
     - The type of query. The value of type must be complete, correct, suggest or submit. It also accepts multiple type of query which is concatinated by ``|``. Note that ``submit`` is invalid value when you specify multiple type of query.
     - 

Required parameters for learning
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

.. list-table::
   :header-rows: 1

   * - Key
     - Description
     - Note
   * - s
     - Elapsed time from 0:00 January 1, 1970
     - Note that you need specify the value of ``s`` in milliseconds
   * - i
     - Unique ID to distinct user
     - Use session ID or IP address for example
   * - l
     - Specify the name of dataset for learning. It also accepts multiple dataset name which is concatinated by ``|``
     - Note that dataset name must be matched to following regular expression ``[A-Za-z ][A-Za-z0-9 ]{0,15}``

Required parameters for suggestion
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

.. list-table::
   :header-rows: 1

   * - Key
     - Description
     - Note
   * - n
     - Specify the name of dataset for suggestion
     - This dataset name is used to calculate suggestion results

Optional parameter
^^^^^^^^^^^^^^^^^^

.. list-table::
   :header-rows: 1

   * - Key
     - Description
     - Note
   * - callback
     - Specify the name of function if you prefer JSONP as response format
     - The name of function must be matched to reqular expression ``[A-Za-z ][A-Za-z0-9 ]{0,15}``

Return value
------------

``groonga-suggest-httpd`` command returns following response in JSON or JSONP format.

In JSON format::

  {TYPE: [[CANDIDATE_1, SCORE_1], [CANDIDATE_2, SCORE_2], ... [CANDIDATE_N, SCORE_N]]}

In JSONP format::

  FUNCTION({TYPE: [[CANDIDATE_1, SCORE_1], [CANDIDATE_2, SCORE_2], ... [CANDIDATE_N, SCORE_N]]})


``TYPE``

  One of ``complete``, ``correct`` and ``suggest``.

``CANDIDATE_N``

  The string of candidate (UTF-8).

``SCORE_N``

  The score.

