Sorting
Learn how to sort the search results in Orama.
To sort, Orama uses the properties defined in the schema
to know on which properties you want to sort.
const db = create({
schema: {
title: "string",
year: "number",
inPromotion: "boolean",
meta: {
tag: "string",
rating: "number",
favorite: "boolean",
},
},
});
const results = search(db, {
term: "prestige",
sortBy: {
property: "title", // or 'year', 'inPromotion'
},
});
Orama supports sorting on 'string', 'number' and 'boolean'. The arrays are not supported.
You can also specify nested properties using the '.' notation: 'meta.tag'
, 'meta.rating'
and 'meta.favorite'
. For example:
const results = search(db, {
term: "prestige",
sortBy: {
property: "meta.rating",
},
});
Reverse order
Orama supports the reverse order specifying the key order
:
const db = create({
schema: {
title: "string",
year: "number",
inPromotion: "boolean",
meta: {
tag: "string",
rating: "number",
favorite: "boolean",
},
},
});
const results = search(db, {
term: "prestige",
sortBy: {
property: "title", // or 'year', 'inPromotion'
order: "DESC", // default is "ASC"
},
});
Memory optimization
By default, Orama allows the sort on all properties defined in the schema.
This creates an in-memory sort index for each properties.
If you want to optimize the memory usage, Orama supports the unsortableProperties
list.
const db = create({
schema: {
title: "string",
year: "number",
inPromotion: "boolean",
meta: {
tag: "string",
rating: "number",
favorite: "boolean",
},
},
sortBy: {
unsortableProperties: ["year", "meta.tag"],
},
});
Custom sort
Orama allows you to specify the sort algorithm in the following way:
const db = create({
schema: {
title: "string",
year: "number",
inPromotion: "boolean",
meta: {
tag: "string",
rating: "number",
favorite: "boolean",
},
},
sortBy: (a, b) => {
// Implement the custom sort algorithm
return a[2].year - b[2].year;
},
});
The function accepts 2 parameter with the following format [string, number, Document]
that stands for:
- id of the document
- score of the document
- the document
Disable sort
You can disable the sort functionality using the following snippet:
const db = create({
schema: {
// The schema
},
sort: {
enabled: false,
},
});
Last updated on