elasticsearch-lua
A 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.
Features:
- One-to-one mapping with REST API and other language clients.
- Proper load balancing across all nodes.
- Pluggable and multiple connection, selection strategies and connection pool.
- Console logging facility.
- Almost every parameter is configurable.
Elasticsearch Version Matrix
Elasticsearch Version | elasticsearch-lua Branch |
---|---|
>= 2.0, < 5.0 | 2.x.y |
Lua Version Requirements
elasticsearch-lua
works for lua >= 5.1 version.
Setup
It can be installed using luarocks
[sudo] luarocks install elasticsearch
Documentation
The complete documetation is here.
Create elasticsearch client instance:
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
.
Standard call
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
Getting info of elasticsearch server
local data, err = client:info()
Index a document
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"
}
}
Get a document
data, err = client:get{
index = "my_index",
type = "my_type",
id = "my_doc"
}
Delete a document
data, err = client:delete{
index = "my_index",
type = "my_type",
id = "my_doc"
}
Searching a document
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"
}
}
}
}
Update a document
data, err = client:update{
index = "my_index",
type = "my_type",
id = "my_doc",
body = {
doc = {
my_key = "new_param"
}
}
}
Contribution
Feel free to file issues and submit pull requests β contributions are welcome. Please try to follow the code style used in the repository.
License
elasticsearch-lua is licensed under the MIT license.