Changelog
View Sourcev0.10.0 - 2025-03-10
New
Added the synonyms
settings to the Algoliax.Indexer
.
It allows you to automatically setup synonyms for your indexes when calling MyIndexer.configure_index()
If not specified or set to nil
, the synonyms will not be configured.
Otherwise, the following keywords are expected, with each key having a default value:
synonyms
: a list of synonym groups, as expected by Algolia. Default[]
replace_existing_synonyms
: Whether to replace existing synonyms. Defaulttrue
forward_to_replicas
: Whether to forward synonyms to replicas. Defaulttrue
You can also provide an arity-1 function (that takes the index_name
) that returns the same keyword list.
If using forward_to_replicas: true
, make sure not to specify synonyms on the replicas themselves to avoid conflicts/overwrites.
defmodule Global do
use Algoliax.Indexer,
index_name: :people,
object_id: :reference,
schemas: People,
algolia: [
attribute_for_faceting: ["age"],
custom_ranking: ["desc(updated_at)"]
]
synonyms: [
synonyms: [
%{
objectID: "synonym1",
type: "synonym",
synonyms: ["pants", "trousers", "slacks"],
...
},
%{
objectID: "synonym2",
...
}
],
forward_to_replicas: false,
replace_existing_synonyms: false
]
end
Other changes
- Updated the list of supported algolia settings.
v0.9.1 - 2024-12-12
New
The Algoliax.Indexer
now supports dynamic definition for the :algolia
settings. It can supports 2 types of configurations:
- (Existing) Keyword list
- (New) Name of a 0-arity function that returns a keyword list
defmodule People do
use Algoliax.Indexer,
index_name: :people,
object_id: :reference,
schemas: [People],
algolia: :runtime_algolia
def runtime_algolia do
[
attribute_for_faceting: ["age"],
custom_ranking: ["desc(updated_at)"]
]
end
end
Also added 2 new exceptions for the :algolia
configuration: InvalidAlgoliaSettingsFunctionError
and InvalidAlgoliaSettingsConfigurationError
Other changes
Existing direct calls to Algoliax.Settings.replica_settings/2
will still work but will not benefit from
the dynamic :algolia
configuration. Please use Algoliax.Settings.replica_settings/3
instead.
v0.9.0 - 2024-11-26
ALGOLIA_API_KEY
and ALGOLIA_APPLICATION_ID
aren't read anymore from system env variables
inside the code. Only application config is now used (as documented).
If you used these env vars, you should now read them inside the config:
config :algoliax,
api_key: System.get_env("ALGOLIA_API_KEY"),
application_id: System.get_env("ALGOLIA_APPLICATION_ID)
v0.8.3 - 2024-10-18
New if
option for replicas which decides if they should be updated or not.
- If not provided, the replica will be updated (so no impact on existing configurations)
- Must be
nil|true|false
or the name (atom) of a arity-0 func which returns a boolean - If provided, the replica will be updated only if the value is
true
or the function returnstrue
Useful for Algolia's A/B testing which requires replicas and only deploy them in production.
v0.8.2 - 2024-09-16
- Upgrading all dependencies
- Added
dependabot
to the repository
v0.8.1 - 2024-09-11
New
- Added new optional settings
default_filters
to be applied automatically when callingreindex
without query orreindex_atomic
. Defaults to%{}
which was the previous behavior.
defmodule BlondeBeerIndexer do
use Algoliax.Indexer,
index_name: :blonde_beers,
object_id: :name,
schemas: [Beer],
default_filters: %{where: [kind: "blonde"]} # <--- can be a map
end
defmodule BeerIndexer do
use Algoliax.Indexer,
index_name: :various_beers,
object_id: :name,
schemas: [Beer1, Beer2, Beer3],
default_filters: :get_filters # <--- can be a function
def get_filters do
%{
Beer1 => %{where: [kind: "blonde"]}, # <--- custom filter for Beer1
:where => [kind: "brune"] # <--- Will be used for Beer2 and Beer3
}
end
end
Contributing
- New
CONTRIBUTING.md
file - Simplified the
config/test.exs
file - Provide a
.env.example
file to help contributors to setup their environment
v0.8.0 - 2024-09-11
Breaking changes
- Errors for
get_object
andget_objects
are now of arity 4 and returns the original request as last attribute
New
- Added possibility to have multiple indexes for a model (applies for replicas as well)
- Added
build_object/2
with the index name as second parameter (useful for translations for example)
v0.7.2 - 2023-09-18
Breaking changes
- require Elixir >= 1.15 and OTP 26
v0.7.1 - 2022-03-29
New
- Add wait_task/1 (https://hexdocs.pm/algoliax/Algoliax.html#wait_task/1)
v0.7.0 - 2022-03-29
Breaking changes
- Indexer operation returns a
%Algoliax.Reponse{}
(#51)
Bug fix
- Ensure clean up on reindex fail
v0.6.0 - 2021-06-10
Updates
- Replace deprecated
hmac
function with new :crypto APImac
function to support OTP-24
Breaking changes
- Drop support for OTP 21. OTP 22+ is now required.
v0.5.0 - 2021-03-04
New
- Welcome to the Jungle became the owner :tada:
- Add ability to define replicas
- Raise when Algolia API error
Breaking changes
generate_secured_api_key/1
is removed in favor ofgenerate_secured_api_key/2
- Drop support of Elixir 1.9. Elixir 1.10 or greater required
Updates
- update hackney to 1.17
v0.4.3 - 2020-08-31
New
- add ability to customize objectID by overriding
get_object_id/1
Improvement
- Make sure index is configured before any action.
v0.4.2 - 2020-05-14
New
- add ability to provide preloads for
reindex
andreindex_atomic
function
defmodule People do
use Algoliax.Indexer,
index_name: :people,
object_id: :reference,
schemas: [
{__MODULE__, [:animals]}
]
algolia: [
attribute_for_faceting: ["age"],
custom_ranking: ["desc(updated_at)"]
]
end
v0.4.1 - 2020-05-01
New
- add
generate_secured_api_key!/1
v0.4.0 - 2020-04-24
New
- add ability configure
:recv_timeout
for hackney. - add ability to pass query_filters or Ecto.Query to
reindex/2
.
filters = %{where: [name: "John"]}
People.reindex(filters)
query = from(p in People, where: p.name == "john")
People.reindex(query)
breaking changes
- improved
generate_secured_api_key/1
- remove attributes macros in favor of
build_object/1
- remove
:prepare_object
options - remove
:preloads
options
v0.3.0 - 2020-04-04
New
- add
prepare_object
to modify object before send to algolia - add ability to provide
build_object/1
instead of attributes - add
schemas
option to override caller
Bug fix
- Fix pagination when
cursor_field
different than:id
delete_object/1
andreindex
w/force_delete: true
don't need to build entire object
breaking changes
- change dependencies to optional (ecto)
- Move algoliax to algoliax/indexer.
# old
use Algoliax,
...
# New
use Algoliax.Indexer,
...
- Move algolia specific settings into
:algolia
option
# old
use Algoliax.Indexer,
index_name: :test,
attributes_for_faceting: ["age"],
searchable_attributes: ["full_name"],
custom_ranking: ["desc(updated_at)"],
...
# New
use Algoliax.Indexer,
index_name: :test,
algolia: [
attributes_for_faceting: ["age"],
searchable_attributes: ["full_name"],
custom_ranking: ["desc(updated_at)"]
],
...
v0.2.0 - 2020-01-27
Enhancements
- add option to customize column used to find records in batch (
cursor_field
) - add preloads to find records in batch.