ExTypesense.Collection (ExTypesense v2.0.0)
View SourceModule for creating, listing and deleting collections and aliases.
In Typesense, a Collection is a group of related Documents that is roughly equivalent to a table in a relational database. When we create a collection, we give it a name and describe the fields that will be indexed when a document is added to the collection.
More here: https://typesense.org/docs/latest/api/collections.html
Summary
Functions
Clone an existing collection's schema (documents are not copied), overrides and synonyms. The actual documents in the collection are not copied, so this is primarily useful for creating new collections from an existing reference template.
Create collection from a map, or module name. Collection name is matched on table name if using Ecto schema by default.
Same as create_collection/1 but passes another connection or opts.
Creates collection with timestamped name and points to an alias.
Same as create_collection_with_alias/1 but passes another connection or opts.
Deletes a collection alias. The collection itself is not affected by this action.
Permanently drops a collection by collection name or module name.
Get a specific collection by string or module name.
Get a specific collection by alias.
List all aliases and the corresponding collections that they map to.
Returns a summary of all your collections. The collections are returned sorted by creation date, with the most recent collections appearing first.
Same as list_collections/0 but passes another connection or option.
Make changes in a collection's fields: adding, removing
or updating an existing field(s). Key name is drop
to
indicate which field is removed (example described below).
Only fields
can only be updated at the moment.
Upserts a collection alias.
Functions
@spec clone_collection(String.t() | module(), String.t()) :: {:ok, OpenApiTypesense.CollectionResponse.t()} | {:error, OpenApiTypesense.ApiResponse.t()}
@spec clone_collection( String.t() | module(), keyword() ) :: {:ok, OpenApiTypesense.CollectionResponse.t()} | {:error, OpenApiTypesense.ApiResponse.t()}
Clone an existing collection's schema (documents are not copied), overrides and synonyms. The actual documents in the collection are not copied, so this is primarily useful for creating new collections from an existing reference template.
Examples
iex> ExTypesense.clone_collection(MyModule.Accounts.User, "persons")
iex> ExTypesense.clone_collection("persons", "accounts")
Same as clone_collection/2
Options
conn
: The custom connection map or struct you passed
Examples
iex> conn = %{api_key: xyz, host: ...}
iex> ExTypesense.clone_collection("persons", "accounts", conn: conn)
iex> conn = OpenApiTypesense.Connection.new()
iex> ExTypesense.clone_collection(MyModule.Accounts.User, "persons", conn: conn)
iex> opts = [conn: conn]
iex> ExTypesense.clone_collection(MyModule.Accounts.User, "persons", opts)
@spec create_collection(map() | module()) :: {:ok, OpenApiTypesense.CollectionResponse.t()} | {:error, OpenApiTypesense.ApiResponse.t()}
Create collection from a map, or module name. Collection name is matched on table name if using Ecto schema by default.
Please refer to these list of schema params.
Examples
iex> schema = %{
...> name: "companies",
...> fields: [
...> %{name: "company_name", type: "string"},
...> %{name: "companies_id", type: "int32"},
...> %{name: "country", type: "string", facet: true}
...> ],
...> default_sorting_field: "companies_id"
...> }
iex> ExTypesense.create_collection(schema)
{:ok, %OpenApiTypesense.CollectionResponse{
created_at: 1234567890,
default_sorting_field: "companies_id",
fields: [...],
name: "companies",
num_documents: 0,
symbols_to_index: [],
token_separators: []
}}
iex> ExTypesense.create_collection(Person)
{:ok, %OpenApiTypesense.CollectionResponse{
created_at: 1234567890,
default_sorting_field: "persons_id",
fields: [...],
name: "persons",
num_documents: 0,
symbols_to_index: [],
token_separators: []
}}
@spec create_collection( map() | module(), keyword() ) :: {:ok, OpenApiTypesense.CollectionResponse.t()} | {:error, OpenApiTypesense.ApiResponse.t()}
Same as create_collection/1 but passes another connection or opts.
Options
conn
: The custom connection map or struct you passedsrc_name
(optional): Clone an existing collection's schema (documents are not copied), overrides and synonyms. This option is used primarily byclone_collection/2
.
Examples
iex> conn = %{api_key: xyz, host: ...}
iex> ExTypesense.create_collection(schema, conn: conn)
iex> conn = OpenApiTypesense.Connection.new()
iex> ExTypesense.create_collection(schema, conn: conn)
iex> opts = [src_name: "companies", conn: conn]
iex> ExTypesense.create_collection(schema, opts)
@spec create_collection_with_alias(map() | module()) :: {:ok, OpenApiTypesense.CollectionResponse.t()} | {:error, OpenApiTypesense.ApiResponse.t()}
Creates collection with timestamped name and points to an alias.
Use case
When using this function, it will append a timestamp in name and adds an alias based on schema name. E.g. if table name is "bricks", then collection name is "bricks-1738558695" and alias name is "bricks". The reason for this addition can be useful when encountering like full re-indexing
One common use-case for aliases is to reindex your data in the background on a new collection and then switch your application to it without any changes to your code. Source
Options
conn
: The custom connection map or struct you passed
Examples
iex> schema = %{
...> name: "companies",
...> fields: [
...> %{name: "company_name", type: "string"},
...> %{name: "companies_id", type: "int32"},
...> %{name: "country", type: "string", facet: true}
...> ],
...> default_sorting_field: "companies_id"
...> }
iex> ExTypesense.create_collection_with_alias(schema)
iex> ExTypesense.create_collection_with_alias(Person)
@spec create_collection_with_alias( map() | module(), keyword() ) :: {:ok, OpenApiTypesense.CollectionResponse.t()} | {:error, OpenApiTypesense.ApiResponse.t()}
Same as create_collection_with_alias/1 but passes another connection or opts.
Examples
iex> conn = %{api_key: xyz, host: ...}
iex> ExTypesense.create_collection_with_alias(schema, conn: conn)
iex> conn = OpenApiTypesense.Connection.new()
iex> ExTypesense.create_collection_with_alias(schema, conn: conn)
iex> opts = [conn: conn]
iex> ExTypesense.create_collection_with_alias(schema, opts)
@spec delete_collection_alias(String.t()) :: {:ok, OpenApiTypesense.CollectionAlias.t()} | {:error, OpenApiTypesense.ApiResponse.t()}
Deletes a collection alias. The collection itself is not affected by this action.
Examples
iex> ExTypesense.delete_collection_alias("persons_sept_8_2019")
@spec delete_collection_alias( String.t(), keyword() ) :: {:ok, OpenApiTypesense.CollectionAlias.t()} | {:error, OpenApiTypesense.ApiResponse.t()}
Same as delete_collection_alias/1
Options
conn
: The custom connection map or struct you passed
Examples
iex> conn = %{api_key: xyz, host: ...}
iex> ExTypesense.delete_collection_alias("persons_sept_8_2019", conn: conn)
iex> conn = OpenApiTypesense.Connection.new()
iex> ExTypesense.delete_collection_alias("persons_sept_8_2019", conn: conn)
iex> opts = [conn: conn]
iex> ExTypesense.delete_collection_alias("persons_sept_8_2019", opts)
@spec drop_collection(String.t() | module()) :: {:ok, OpenApiTypesense.CollectionResponse.t()} | {:error, OpenApiTypesense.ApiResponse.t()}
Permanently drops a collection by collection name or module name.
This action cannot be undone. For large collections, this might have an impact on read latencies.
alias not affected
dropping a collection does not remove the referenced alias, only the indexed documents.
Examples
iex> ExTypesense.drop_collection("persons")
iex> ExTypesense.drop_collection(MyModule.Accounts.User)
@spec drop_collection( String.t() | module(), keyword() ) :: {:ok, OpenApiTypesense.CollectionResponse.t()} | {:error, OpenApiTypesense.ApiResponse.t()}
Same as drop_collection/2
Options
conn
: The custom connection map or struct you passed
Examples
iex> conn = %{api_key: xyz, host: ...}
iex> ExTypesense.drop_collection("persons", conn: conn)
iex> ExTypesense.drop_collection("persons", conn: conn)
iex> opts = [conn: conn]
iex> ExTypesense.drop_collection(MyModule.Accounts.User, opts)
@spec get_collection(String.t() | module()) :: {:ok, OpenApiTypesense.CollectionResponse.t()} | {:error, OpenApiTypesense.ApiResponse.t()}
Get a specific collection by string or module name.
Examples
iex> ExTypesense.get_collection(MyModule.Accounts.User)
iex> ExTypesense.get_collection("persons")
@spec get_collection( String.t() | module(), keyword() ) :: {:ok, OpenApiTypesense.CollectionResponse.t()} | {:error, OpenApiTypesense.ApiResponse.t()}
Same as get_collection/1
Options
conn
: The custom connection map or struct you passed
Examples
iex> conn = %{api_key: xyz, host: ...}
iex> ExTypesense.get_collection("persons", conn: conn)
iex> conn = OpenApiTypesense.Connection.new()
iex> ExTypesense.get_collection(MyModule.Accounts.User, conn: conn)
iex> opts = [conn: conn]
iex> ExTypesense.get_collection(MyModule.Accounts.User, opts)
@spec get_collection_alias(String.t() | module()) :: {:ok, OpenApiTypesense.CollectionAlias.t()} | {:error, OpenApiTypesense.ApiResponse.t()}
Get a specific collection by alias.
Examples
iex> ExTypesense.get_collection_alias("persons_sept_8_2019")
@spec get_collection_alias( String.t() | module(), keyword() ) :: {:ok, OpenApiTypesense.CollectionAlias.t()} | {:error, OpenApiTypesense.ApiResponse.t()}
Same as get_collection_alias/1
Options
conn
: The custom connection map or struct you passed
Examples
iex> conn = %{api_key: xyz, host: ...}
iex> ExTypesense.get_collection_alias("persons_sept_8_2019", conn: conn)
iex> conn = OpenApiTypesense.Connection.new()
iex> ExTypesense.get_collection_alias("persons_sept_8_2019", conn: conn)
iex> opts = [conn: conn]
iex> ExTypesense.get_collection_alias("persons_sept_8_2019", opts)
@spec list_collection_aliases() :: {:ok, OpenApiTypesense.CollectionAliasesResponse.t()} | :error
List all aliases and the corresponding collections that they map to.
Examples
iex> ExTypesense.list_collection_aliases()
@spec list_collection_aliases(keyword()) :: {:ok, OpenApiTypesense.CollectionAliasesResponse.t()} | :error
Same as list_collection_aliases/0
Options
conn
: The custom connection map or struct you passed
Examples
iex> conn = %{api_key: xyz, host: ...}
iex> ExTypesense.list_collection_aliases(conn: conn)
iex> conn = OpenApiTypesense.Connection.new()
iex> ExTypesense.list_collection_aliases(conn: conn)
iex> opts = [conn: conn]
iex> ExTypesense.list_collection_aliases(opts)
@spec list_collections() :: {:ok, [OpenApiTypesense.CollectionResponse.t()]} | :error
Returns a summary of all your collections. The collections are returned sorted by creation date, with the most recent collections appearing first.
Examples
iex> ExTypesense.list_collections()
@spec list_collections(keyword()) :: {:ok, [OpenApiTypesense.CollectionResponse.t()]} | :error
Same as list_collections/0 but passes another connection or option.
Options
conn
: The custom connection map or struct you passedlimit
: Limit results in paginating on collection listing.offset
: Skip a certain number of results and start after that.exclude_fields
: Exclude the field definitions from being returned in the response.
Examples
iex> conn = %{api_key: xyz, host: ...}
iex> ExTypesense.list_collections(conn: conn)
iex> conn = OpenApiTypesense.Connection.new()
iex> ExTypesense.list_collections(conn: conn)
iex> opts = [exclude_fields: "fields", limit: 10, conn: conn]
iex> ExTypesense.list_collections(opts)
@spec update_collection_fields(String.t() | module(), map()) :: {:ok, OpenApiTypesense.CollectionUpdateSchema.t()} | {:error, OpenApiTypesense.ApiResponse.t()}
Make changes in a collection's fields: adding, removing
or updating an existing field(s). Key name is drop
to
indicate which field is removed (example described below).
Only fields
can only be updated at the moment.
Typesense special field id
Typesense supports updating all fields
except the id
field (since it's a special field
within Typesense). Do not confuse id
of Typesense
with Ecto Schema or DB record(s).
Which version supports this function
We can update the collection's fields, starting on version 27.0.rc22 and above.
Examples
iex> fields = %{
...> fields: [
...> %{name: "num_employees", drop: true},
...> %{name: "company_category", type: "string"},
...> ],
...> }
iex> ExTypesense.update_collection_fields("companies", fields)
%OpenApiTypesense.CollectionUpdateSchema{
fields: [
...
]
}
@spec update_collection_fields(String.t() | module(), map(), keyword()) :: {:ok, OpenApiTypesense.CollectionUpdateSchema.t()} | {:error, OpenApiTypesense.ApiResponse.t()}
Same as update_collection_fields/2
Options
conn
: The custom connection map or struct you passed
Examples
iex> conn = %{api_key: xyz, host: ...}
iex> ExTypesense.update_collection_fields("persons", fields, conn: conn)
iex> conn = OpenApiTypesense.Connection.new()
iex> ExTypesense.update_collection_fields("persons", fields, conn: conn)
iex> opts = [conn: conn]
iex> ExTypesense.get_collection("persons", fields, opts)
@spec upsert_collection_alias(String.t(), String.t() | module()) :: {:ok, OpenApiTypesense.CollectionAlias.t()} | {:error, OpenApiTypesense.ApiResponse.t()}
Upserts a collection alias.
An alias is a virtual collection name that points to a real collection. If you're familiar with symbolic links on Linux, it's very similar to that. Aliases are useful when you want to reindex your data in the background on a new collection and switch your application to it without any changes to your code.
collection_name
can either be a string or module name
Examples
iex> ExTypesense.upsert_collection_alias("persons_sept_8_2019", "persons")
@spec upsert_collection_alias(String.t(), String.t() | module(), keyword()) :: {:ok, OpenApiTypesense.CollectionAlias.t()} | {:error, OpenApiTypesense.ApiResponse.t()}
Same as upsert_collection_alias/2
Options
conn
: The custom connection map or struct you passed
Examples
iex> conn = %{api_key: xyz, host: ...}
iex> ExTypesense.upsert_collection_alias("persons_sept_8_2019", "persons", conn: conn)
iex> conn = OpenApiTypesense.Connection.new()
iex> ExTypesense.upsert_collection_alias("persons_sept_8_2019", MyModule.Accounts.Person, conn: conn)
iex> opts = [conn: conn]
iex> ExTypesense.upsert_collection_alias("persons_sept_8_2019", "persons", opts)