# Sorting
To sort records in Algolia, you have to create replicas of the index in the dashboard and apply desired sort rules to each of them.
This part is well-described in Algolia's document (opens new window). Follow this document as the first step.
# Example
In this example, we will show you a process of applying both ascending and descending sort by the name (string) attribute. Let's imagine we have an index called products.
At first, create 2 replicas of products index and sort them (opens new window) by name attribute - ascending and descending:
products-by-name-ascproducts-by-name-desc
Then in middleware.config.js set following structure for algolia.configuration.entities.product:
'name:asc': {
index: 'products-by-name-asc',
label: 'Name A-Z',
default: true
},
'name:desc': {
label: 'Name Z-A',
index: 'products-by-name-desc',
}
Then, when calling the search method, all you have to do is set a value of the sort field:
import { useSearch } from '@vsf-enterprise/algolia';
// ...
const { search } = useSearch('my-key');
// ...
await search({
query: '',
entity: 'product',
sort: `name:asc`
});
// or
await search({
query: '',
entity: 'product',
sort: `name:desc`
});
The sort value should be equal to one of the keys specified for an entity object inside the middleware.config.js file. In this example, available options are name:asc and name:desc.
Server will replace entity+sort pair to the index name.
# Sort by multilang field
Let's extend an example from the previous step. In order to sort by multilang field, you have to create a replica for every language for every property:
products-by-name-asc-en,products-by-name-desc-en,products-by-name-asc-de,products-by-name-desc-de.
Then in middleware.config.js set following structure for algolia.configuration.entities.product:
'name:asc': {
index: 'products-by-name-asc-en', // selected if the locale is not specified
index_en: 'products-by-name-asc-en',
index_de: 'products-by-name-asc-de',
label: 'Name A-Z',
default: true
},
'name:desc': {
index: 'products-by-name-desc-en', // selected if the locale is not specified
index_en: 'products-by-name-desc-en',
index_de: 'products-by-name-desc-de',
label: 'Name Z-A'
}
Then, when calling the search method, it's important to specify locale. If it is not provided, then the value of the index property will be used.
import { useSearch } from '@vsf-enterprise/algolia';
import { useVSFContext } from '@vue-storefront/core';
// ...
const { search } = useSearch('my-key');
const { app: { i18n: { locale }} } = useVSFContext();
// ...
await search({
query: '',
entity: 'product',
sort: `name:asc`,
locale: 'en'
});
// or
await search({
query: '',
entity: 'product',
sort: `name:asc`,
locale: 'de'
});
// or
await search({
query: '',
entity: 'product',
sort: `name:asc`,
locale: locale
});
// or
await search({
query: '',
entity: 'product',
sort: `name:asc`
});
The locale value should fill <gap> in index_<gap> property name.
The server will use enitity+sort+locale to find the corresponding index name.
← Usage Using adapters →