Skip to content

Sorting

To sort, Orama uses the properties defined in the schema to know on which properties you want to sort.

const db = await create({
schema: {
title: "string",
year: "number",
inPromotion: "boolean",
meta: {
tag: "string",
rating: "number",
favorite: "boolean",
},
},
});
const results = await 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 = await search(db, {
term: "prestige",
sortBy: {
property: "meta.rating",
},
});

Reverse order

Orama supports the reverse order specifying the key order:

const db = await create({
schema: {
title: "string",
year: "number",
inPromotion: "boolean",
meta: {
tag: "string",
rating: "number",
favorite: "boolean",
},
},
});
const results = await 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 = await 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 = await 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 = await create({
schema: {
// The schema
},
sort: {
enabled: false,
},
});