A super simple Elasticsearch tool with its own DSL and Ecto-like usage.
Make the Repo
defmodule Example.Repo do
use BusCar.Repo, otp_app: :some_example
end
Make a Mapping
defmodule Example.Doge do
use BusCar.Document
document "animal", "dog" do
property :name, :string
property :age, :integer
timestamps
end
end
Get all the Models (aliased names see .iex.exs
for example)
iex> Repo.all(Doge)
[
%Example.Doge{_version: 1, age: 26, id: "33", inserted_at: "2016-09-26T02:34:20.187264Z", name: "Moe Moe", updated_at: "2016-09-26T02:34:20.187264Z"},
%Example.Doge{_version: 1, age: 10, id: "AVdkWj0_-SwwFG-cHjcZ", inserted_at: "2016-09-26T02:36:58.044176Z", name: "Dora", updated_at: "2016-09-26T02:36:58.044176Z"}
]
Insert a few Models
iex> Repo.insert(%Doge{name: "Daisy May", age: 18})
%Example.Doge{_version: 1, age: 18, id: "AVdkXSuf-SwwFG-cHjcd", inserted_at: "2016-09-26T02:40:10.140185Z", name: "Daisy May", updated_at: "2016-09-26T02:40:10.140185Z"}
iex> Repo.insert(%Doge{id: 10, name: "Punky", age: 35})
%Example.Doge{_version: 1, age: 35, id: "10", inserted_at: "2016-09-26T02:50:21.290414Z", name: "Punky", updated_at: "2016-09-26T02:50:21.290414Z"}
Go Bananas (Young Adult Doges only)
iex> Repo.search(Doge, [:query, :bool, :must, :range, :age, :gte, 18, :lt, 30])
[
%Example.Doge{_version: nil, age: 26, id: "33", inserted_at: "2016-09-26T02:34:20.187264Z", name: "Moe Moe", updated_at: "2016-09-26T02:34:20.187264Z"},
%Example.Doge{_version: nil, age: 18, id: "AVdkXSuf-SwwFG-cHjcd", inserted_at: "2016-09-26T02:40:10.140185Z", name: "Daisy May", updated_at: "2016-09-26T02:40:10.140185Z"}
]
If available in Hex, the package can be installed as:
- Add
bus_car
to your list of dependencies inmix.exs
:
def deps do
[{:bus_car, "~> 0.2.13"}]
end
- Customizable Config
- Bool Dsl
- ConstantScore Dsl
- Exists Dsl
- Filter Dsl
- Match Dsl
- Query Dsl
- MustNot Dsl
- Must Dsl
- Nested Dsl
- Prefix Dsl
- Query Dsl
- Range Dsl
- Should Dsl
- Term Dsl
- Document to DSL to Requests pipeline
- Ecto-ish Interface
- Make sure Repo uses
:otp_app
keyword arg - Request Tests
- Api Tests
- Repo Tests
- Docs
- Mappings Tests
- Github Repo for Example Project and Advanced Examples
- Optimistic "Locking" on update
- Full Functional Tests
- Geo Dsl
- MoreLikeThis Query
- Upsert
- Hex.pm
- DB Connection Pooling?
- Extract BusCar DSL into its own Repo