Sorting
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, },});