Skip to content

CriztianiX/lapis-elasticsearch

Repository files navigation

lapis-elasticsearch - elasticsearch support for lapis

Config

Add an elasticserrch key in your config like this:

config({ "development"}, {
    elasticsearch = {
        index = "twitter",
        hosts = {
            {
                protocol = "http",
                port = 9200,
                host = "127.0.0.1"
            }
        }
    }
})

Models

Provides a Model base class for making Lua tables that can be synchronized with elasticsearch type.

The most primitive model is a blank model:

local Model = require("lapis.db.elasticsearch.model").Model
local Tweets = Model:extend("tweet", {
  per_page = 2
})
The first argument to extend is the name of the type to associate the model to. 

Model:create(values, create_opts = nil) - The create class method is used to create new docs. It takes a table of column values to create the docs with. It returns an instance of the model.

local tweet = Tweets:create({
  name  = "Criztian Haunsen"
}, { id = "my_id"})

Model:count(query) - Counts the number of records in the table that match the clause.

local tweet = Tweets:count()
local tweet = Tweets:count({
  match_all = {}
})

Model:find(id)

local tweet = Tweets:find(1)
The find class method fetches a single row from the table by id. 

Model:find_all(ids)

local tweets = Tweets:find_all({1,2,3})

Model:select(query, ...)

local query = {
  match_all = {}
}
local tweet = Tweets:select(query)

Model:find_all(ids)

local tweets = Tweets:find_all({1,2,3})

Model:table_name() - Returns the name of the table backed by the model.

local tweet = Tweets:table_name()

Model:delete(id)

local res = Tweets:delete(1)
res will be true on success delete

Instance Methods

obj:update(fields = {}) - Instances of models have the update method for updating the row. The values of the primary keys are used to uniquely identify the row for updating.

tweet:update({
  author = "Peter"
})

Pagination

We can create a paginator like so:

local query = {
  match_all = {}
}
local paginated = Tweets:paginated(query)

Gets the total number of items that can be returned.

paginated:total_items()

Returns the total number of pages.

paginated:num_pages()

Gets page_num, where pages are 1 indexed

paginated:get_page(2)

About

Model support for elasticsearch

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published