Introduction to search
Orama provides a simple search interface that allows you to search through your documents.
With a unique API, you can perform full-text, vector, and hybrid search.
Searching with Orama
By default, Orama uses all the string properties to perform the search. Let’s say we have a database that contains some elements:
We can now search for documents as easily as:
If you want to return all documents in the database, then you can omit the term
in the search parameters.
What does the search
method return?
Now that we have learned how to perform searches on a Orama database, we can briefly analyze the response that Orama gives us back.
Let’s say we have run the following query:
Whether the document was found or not, Orama gives back an object
with the
following properties:
Property | Type | Description |
---|---|---|
elapsed | object | Time taken to execute the query. Returns an object with the following shape: { raw: number, formatted: string } |
hits | object | Array of results containing result score (from 0 to 1 based on relevance), Orama’s ID, and original document. |
count | number | Number of total results. |
In case of missing or empty term
, all scores will be returned as 0
.
Search on specific properties
The properties
property defines in which properties to run our query.
We are now searching for all the documents that contain the word Chris
in the
director
property.
We can also search through nested properties:
By default, Orama searches in all searchable properties.
Exact match
The exact
property finds all the document with an exact match of the term
property.
We are now searching for all the documents that contain exactly
the word
Chris
in the director
property.
Without the exact
property, for example, the term Christopher Nolan
would be returned as well, as it contains the word Chris
.
Typo tolerance
The tolerance
property allows specifying the maximum distance (following the
Levenshtein algorithm) between the term and the searchable property.
The Levenshtein distance is a string metric for measuring the difference between two sequences. Informally, the Levenshtein distance between two words is the minimum number of single-character edits (insertions, deletions or substitutions) required to change one word into the other. (read more)
We are searching for all the documents that contain a term with an edit distance
of 1
(e.g. Chris
) in the director
property.
Results limits
The limit
property limits the result at the specified number.
We are searching for the first
document that contains the term Chris
in the
director
property.
Results offset
The offset
property skips the first X
results.
We are searching for all the documents that contain the term Chris
in the
director
property, but returning the document at offset 1
.
Distinct
Orama can calculate distinct values letting you specify a unique key as follows:
Using the property distinctOn
, Orama returns only the first document for every property type
value.
The results.hits
array will contain only the first documents for every property type
value.
NB: you can use this feature in combination with sortBy
.
elapsed
property customization
You can always customize the behavior of the elapsed
property by using the formatElapsedTime
component when creating a new Orama instance:
When performing a search operation, the elapsed
property will now return the following value:
Caveats
Search is not case sensitive.