Skip to content
This repository was archived by the owner on Feb 4, 2025. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@ end

```elixir
# Create Index
Meilisearch.Index.create("index_name")
Meilisearch.Indexes.create("index_name")

# Create Index and set primary key
Meilisearch.Index.create("index_name", primary_key: "key_name")
Meilisearch.Indexes.create("index_name", primary_key: "key_name")

# Insert documents
documents = [
Expand All @@ -44,10 +44,10 @@ documents = [
"title" => "The Fly"
}
]
Meilisearch.Document.add_or_replace("index_name", documents)
Meilisearch.Documents.add_or_replace("index_name", documents)

# Search
Meilisearch.Search.search("water")
Meilisearch.Searches.search("water")
```

### Available Modules
Expand All @@ -58,7 +58,7 @@ Meilisearch.Search.search("water")
- [X] Version
- [X] Documents
- [X] Search
- [X] Updates
- [X] Tasks
- [X] Keys
- [X] Settings
- [X] System Information
Expand Down Expand Up @@ -102,4 +102,4 @@ $ docker run -it --rm -p 7700:7700 getmeili/meilisearch:latest ./meilisearch --m

## License

meilisearch-elixir is released under the MIT license. Please refer to [LICENSE](LICENSE) for details.
meilisearch-elixir is released under the MIT license. Please refer to [LICENSE](LICENSE) for details.
17 changes: 8 additions & 9 deletions lib/meilisearch.ex
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,13 @@ defmodule Meilisearch do

The following Modules are provided for interacting with Meilisearch:

* `Meilisearch.Index`: [Indexes API](https://docs.meilisearch.com/references/indexes.html)
* `Meilisearch.Document`: [Documents API](https://docs.meilisearch.com/references/documents.html)
* `Meilisearch.Search`: [Search API](https://docs.meilisearch.com/references/search.html)
* `Meilisearch.Update`: [Updates API](https://docs.meilisearch.com/references/updates.html)
* `Meilisearch.Keys`: [Keys API](https://docs.meilisearch.com/references/keys.html)
* `Meilisearch.Stats`: [Stats API](https://docs.meilisearch.com/references/stats.html)
* `Meilisearch.Health`: [Health API](https://docs.meilisearch.com/references/health.html)
* `Meilisearch.Version`: [Version API](https://docs.meilisearch.com/references/version.html)
* `Meilisearch.System`: [System Information API](https://docs.meilisearch.com/references/sys-info.html)
* `Meilisearch.Indexes`: [Indexes API](https://docs.meilisearch.com/references/api/indexes.html)
* `Meilisearch.Documents`: [Documents API](https://docs.meilisearch.com/references/api/documents.html)
* `Meilisearch.Searches`: [Search API](https://docs.meilisearch.com/references/api/search.html)
* `Meilisearch.Tasks`: [Tasks API](https://docs.meilisearch.com/references/api/tasks.html)
* `Meilisearch.Keys`: [Keys API](https://docs.meilisearch.com/references/api/keys.html)
* `Meilisearch.Stats`: [Stats API](https://docs.meilisearch.com/references/api/stats.html)
* `Meilisearch.Health`: [Health API](https://docs.meilisearch.com/references/api/health.html)
* `Meilisearch.Versions`: [Version API](https://docs.meilisearch.com/reference/api/version.html)
"""
end
2 changes: 1 addition & 1 deletion lib/meilisearch/http.ex
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,6 @@ defmodule Meilisearch.HTTP do
defp add_auth_header(headers) do
api_key = Meilisearch.Config.api_key()

[{"X-Meili-API-Key", api_key} | headers]
[{"Authorization", "Bearer " <> api_key} | headers]
end
end
58 changes: 29 additions & 29 deletions lib/meilisearch/settings.ex
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ defmodule Meilisearch.Settings do
## Example

iex> Meilisearch.Settings.update("meilisearch_test", %{synonyms: %{alien: ["ufo"]}})
{:ok, %{"updateId" => 1}}
{:ok, %{"uid" => 1}}
"""
@spec update(String.t(), any()) :: HTTP.response()
def update(index_uid, settings \\ %{}) do
Expand All @@ -55,7 +55,7 @@ defmodule Meilisearch.Settings do
## Example

iex> Meilisearch.Settings.reset("meilisearch_test")
{:ok, %{"updateId" => 1}}
{:ok, %{"uid" => 1}}
"""
@spec reset(String.t()) :: HTTP.response()
def reset(index_uid) do
Expand All @@ -81,7 +81,7 @@ defmodule Meilisearch.Settings do
## Example

iex> Meilisearch.Settings.update_synonyms("meilisearch_test", %{alien: ["ufo"]})
{:ok, %{"updateId" => 1}}
{:ok, %{"uid" => 1}}
"""
@spec update_synonyms(String.t(), any()) :: HTTP.response()
def update_synonyms(index_uid, synonyms) do
Expand All @@ -94,7 +94,7 @@ defmodule Meilisearch.Settings do
## Example

iex> Meilisearch.Settings.reset_synonyms("meilisearch_test")
{:ok, %{"updateId" => 1}}
{:ok, %{"uid" => 1}}
"""
@spec reset_synonyms(String.t()) :: HTTP.response()
def reset_synonyms(index_uid) do
Expand All @@ -120,7 +120,7 @@ defmodule Meilisearch.Settings do
## Example

iex> Meilisearch.Settings.update_stop_words("meilisearch_test", ["the", "of", "to"])
{:ok, %{"updateId" => 1}}
{:ok, %{"uid" => 1}}
"""
@spec update_stop_words(String.t(), list(String.t())) :: HTTP.response()
def update_stop_words(index_uid, stop_words) do
Expand All @@ -133,7 +133,7 @@ defmodule Meilisearch.Settings do
## Example

iex> Meilisearch.Settings.reset_stop_words("meilisearch_test")
{:ok, %{"updateId" => 1}}
{:ok, %{"uid" => 1}}
"""
@spec reset_stop_words(String.t()) :: HTTP.response()
def reset_stop_words(index_uid) do
Expand Down Expand Up @@ -170,7 +170,7 @@ defmodule Meilisearch.Settings do
"meilisearch_test",
["typo", "words", "proximity", "attribute"]
)
{:ok, %{"updateId" => 1}}
{:ok, %{"uid" => 1}}
"""
@spec update_ranking_rules(String.t(), list(String.t())) :: HTTP.response()
def update_ranking_rules(index_uid, ranking_rules) do
Expand All @@ -183,7 +183,7 @@ defmodule Meilisearch.Settings do
## Example

iex> Meilisearch.Settings.reset_ranking_rules("meilisearch_test")
{:ok, %{"updateId" => 1}}
{:ok, %{"uid" => 1}}
"""
@spec reset_ranking_rules(String.t()) :: HTTP.response()
def reset_ranking_rules(index_uid) do
Expand All @@ -195,30 +195,30 @@ defmodule Meilisearch.Settings do

## Example

iex> Meilisearch.Settings.get_attributes_for_faceting("meilisearch_test")
iex> Meilisearch.Settings.get_filterable_attributes("meilisearch_test")
{:ok, []}
"""
@spec get_attributes_for_faceting(String.t()) :: HTTP.response()
def get_attributes_for_faceting(index_uid) do
HTTP.get_request("indexes/#{index_uid}/settings/attributes-for-faceting")
@spec get_filterable_attributes(String.t()) :: HTTP.response()
def get_filterable_attributes(index_uid) do
HTTP.get_request("indexes/#{index_uid}/settings/filterable-attributes")
end

@doc """
Update attributes for faceting.

## Example

iex> Meilisearch.Settings.update_attributes_for_faceting(
iex> Meilisearch.Settings.update_filterable_attributes(
"meilisearch_test",
["title"]
)
{:ok, %{"updateId" => 1}}
{:ok, %{"uid" => 1}}
"""
@spec update_attributes_for_faceting(String.t(), list(String.t())) :: HTTP.response()
def update_attributes_for_faceting(index_uid, attributes_for_faceting) do
@spec update_filterable_attributes(String.t(), list(String.t())) :: HTTP.response()
def update_filterable_attributes(index_uid, filterable_attributes) do
HTTP.post_request(
"indexes/#{index_uid}/settings/attributes-for-faceting",
attributes_for_faceting
"indexes/#{index_uid}/settings/filterable-attributes",
filterable_attributes
)
end

Expand All @@ -227,12 +227,12 @@ defmodule Meilisearch.Settings do

## Example

iex> Meilisearch.Settings.reset_attributes_for_faceting("meilisearch_test")
{:ok, %{"updateId" => 1}}
iex> Meilisearch.Settings.reset_filterable_attributes("meilisearch_test")
{:ok, %{"uid" => 1}}
"""
@spec reset_attributes_for_faceting(String.t()) :: HTTP.response()
def reset_attributes_for_faceting(index_uid) do
HTTP.delete_request("indexes/#{index_uid}/settings/attributes-for-faceting")
@spec reset_filterable_attributes(String.t()) :: HTTP.response()
def reset_filterable_attributes(index_uid) do
HTTP.delete_request("indexes/#{index_uid}/settings/filterable-attributes")
end

@doc """
Expand All @@ -254,7 +254,7 @@ defmodule Meilisearch.Settings do
## Example

iex> Meilisearch.Settings.update_distinct_attribute("meilisearch_test", "id")
{:ok, %{"updateId" => 1}}
{:ok, %{"uid" => 1}}
"""
@spec update_distinct_attribute(String.t(), String.t()) :: HTTP.response()
def update_distinct_attribute(index_uid, distinct_attribute) do
Expand All @@ -270,7 +270,7 @@ defmodule Meilisearch.Settings do
## Example

iex> Meilisearch.Settings.reset_distinct_attribute("meilisearch_test")
{:ok, %{"updateId" => 1}}
{:ok, %{"uid" => 1}}
"""
@spec reset_distinct_attribute(String.t()) :: HTTP.response()
def reset_distinct_attribute(index_uid) do
Expand All @@ -296,7 +296,7 @@ defmodule Meilisearch.Settings do
## Example

iex> Meilisearch.Settings.update_searchable_attributes("meilisearch_test", ["title"])
{:ok, %{"updateId" => 1}}
{:ok, %{"uid" => 1}}
"""
@spec update_searchable_attributes(String.t(), list(String.t())) :: HTTP.response()
def update_searchable_attributes(index_uid, searchable_attributes) do
Expand All @@ -312,7 +312,7 @@ defmodule Meilisearch.Settings do
## Example

iex> Meilisearch.Settings.reset_searchable_attributes("meilisearch_test")
{:ok, %{"updateId" => 1}}
{:ok, %{"uid" => 1}}
"""
@spec reset_searchable_attributes(String.t()) :: HTTP.response()
def reset_searchable_attributes(index_uid) do
Expand All @@ -338,7 +338,7 @@ defmodule Meilisearch.Settings do
## Example

iex> Meilisearch.Settings.update_displayed_attributes("meilisearch_test", ["title"])
{:ok, %{"updateId" => 1}}
{:ok, %{"uid" => 1}}
"""
@spec update_displayed_attributes(String.t(), list(String.t())) :: HTTP.response()
def update_displayed_attributes(index_uid, displayed_attributes) do
Expand All @@ -354,7 +354,7 @@ defmodule Meilisearch.Settings do
## Example

iex> Meilisearch.Settings.reset_displayed_attributes("meilisearch_test")
{:ok, %{"updateId" => 1}}
{:ok, %{"uid" => 1}}
"""
@spec reset_displayed_attributes(String.t()) :: HTTP.response()
def reset_displayed_attributes(index_uid) do
Expand Down
39 changes: 30 additions & 9 deletions lib/meilisearch/updates.ex → lib/meilisearch/tasks.ex
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
defmodule Meilisearch.Updates do
defmodule Meilisearch.Tasks do
@moduledoc """
Collection of functions used to get information about the progress of updates.

[MeiliSearch Documentation - Updates](https://docs.meilisearch.com/references/updates.html)
[MeiliSearch Documentation - Tasks](https://docs.meilisearch.com/references/updates.html)
"""

alias Meilisearch.HTTP
Expand All @@ -11,28 +11,49 @@ defmodule Meilisearch.Updates do
Get the status of individual update for given index.

## Example
iex> Meilisearch.Updates.get("meilisearch_test", 1)
iex> Meilisearch.Tasks.get("meilisearch_test", 1)
{:ok,
%{
"duration" => 0.013233943,
"enqueuedAt" => "2020-05-30T03:27:57.462943453Z",
"processedAt" => "2020-05-30T03:27:57.478393007Z",
"status" => "processed",
"type" => %{"name" => "DocumentsAddition", "number" => 1},
"updateId" => 0
"uid" => 0
}
}
"""
@spec get(String.t(), String.t() | integer) :: HTTP.response()
def get(index_uid, update_id) do
HTTP.get_request("indexes/#{index_uid}/updates/#{update_id}")
def get(index_uid, uid) do
HTTP.get_request("indexes/#{index_uid}/tasks/#{uid}")
end

@doc """
Get the status of individual update.

## Example
iex> Meilisearch.Tasks.get(1)
{:ok,
%{
"duration" => 0.013233943,
"enqueuedAt" => "2020-05-30T03:27:57.462943453Z",
"processedAt" => "2020-05-30T03:27:57.478393007Z",
"status" => "processed",
"type" => %{"name" => "DocumentsAddition", "number" => 1},
"uid" => 0
}
}
"""
@spec get(String.t() | integer) :: HTTP.response()
def get(uid) do
HTTP.get_request("/tasks/#{uid}")
end

@doc """
Get the status of all updates for given index.

## Example
iex> Meilisearch.Updates.list("meilisearch_test")
iex> Meilisearch.Tasks.list("meilisearch_test")
{:ok,
[
%{
Expand All @@ -41,12 +62,12 @@ defmodule Meilisearch.Updates do
"processedAt" => "2020-05-30T03:27:57.478393007Z",
"status" => "processed",
"type" => %{"name" => "DocumentsAddition", "number" => 1},
"updateId" => 0
"uid" => 0
}
]}
"""
@spec list(String.t()) :: HTTP.response()
def list(index_uid) do
HTTP.get_request("indexes/#{index_uid}/updates")
HTTP.get_request("indexes/#{index_uid}/tasks")
end
end
37 changes: 37 additions & 0 deletions lib/meilisearch/wait.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
defmodule Meilisearch.Wait do
@moduledoc """
Utils functions to handle async api.
"""

alias Meilisearch.Tasks

@doc """
Wait for meilisearch to handle async operation.

### Examples
iex> Meilisearch.Indexes.create("meilisearch_test") |> Mailisearch.Wait.wait()
{:ok,
%{
"createdAt" => "2020-05-23T06:20:18.394281328Z",
"name" => "meilisearch_test",
"primaryKey" => nil,
"uid" => "meilisearch_test",
"updatedAt" => "2020-05-23T06:20:18.394292399Z"
}
}
"""
def wait({:ok, %{"uid" => uid}}) do
wait(uid)
end

def wait(uid) do
case Tasks.get(uid) do
{:ok, %{"status" => "enqueued"}} ->
:timer.sleep(500)
wait(uid)

_ ->
:timer.sleep(500)
end
end
end
Loading