A simple low level client for elasticsearch written in lua.
In accordance with other official low level clients, the client accepts associative arrays in the form of lua table as parameters.
- One-to-one mapping with REST API and other language clients
- Proper load balancing across all nodes.
- Pluggable and multiple selection strategies and connection pool.
- Console logging facility.
- Almost every parameter is configurable.
elasticsearch-lua
works for lua >= 5.1 version.
It has been successfully tested for elasticsearch version 1.6.
- Clone this repository and
cd
to it. - Download and install
luarocks
. Follow these steps. Make sure to change lua's version to 5.3 while installation(default is 5.1). - Install dependencies:
[sudo] luarocks install elasticsearch-scm-0.rockspec
- Add the source directory to your lua program's
package.path
.
OR
It can also be installed using luarocks
[sudo] luarocks install --server=http://luarocks.org/manifests/dhavalkapil elasticsearch
local elasticsearch = require "elasticsearch"
local client = elasticsearch.client{
hosts = {
{ -- Ignoring any of the following hosts parameters is allowed.
-- The default shall be set
protocol = "http",
host = "localhost",
port = 9200
}
},
-- Optional parameters
params = {
pingTimeout = 2
}
}
-- Will connect to default host/port
local client = elasticsearch.client()
Full list of params
:
pingTimeout
: The timeout of a connection for ping and sniff request. Default is 1.selector
: The type of selection strategy to be used. Default isRoundRobinSelector
.connectionPool
: The type of connection pool to be used. Default isStaticConnectionPool
.connectionPoolSettings
: The connection pool settings,maxRetryCount
: The maximum times to retry if a particular connection fails.logLevel
: The level of logging to be done. Default iswarning
.
local param1, param2 = client:<func>()
param1
: Stores the data returned or nil
on error
param2
: Stores the HTTP status code on success or the error message on failure
local data, err = client:info()
Everything is represented as a lua table.
local data, err = client:index{
index = "my_index",
type = "my_type",
id = "my_doc",
body = {
my_key = "my_param"
}
}
data, err = client:get{
index = "my_index",
type = "my_type",
id = "my_doc"
}
data, err = client:delete{
index = "my_index",
type = "my_type",
id = "my_doc"
}
You can search a document using either query string:
data, err = client:search{
index = "my_index",
type = "my_type",
q = "my_key:my_param"
}
Or either a request body:
data, err = client:search{
index = "my_index",
type = "my_type",
body = {
query = {
match = {
my_key = "my_param"
}
}
}
}
data, err = client:update{
index = "my_index",
type = "my_type",
id = "my_doc",
body = {
doc = {
my_key = "new_param"
}
}
}