Indexing the Documents in a Collection with SODA for In-Database JavaScript
Indexes can speed up data access, regardless of whether you use the NoSQL
style SODA API or a relational approach. You index documents in a SODA collection using
SodaCollection.createIndex(). Its IndexSpec parameter is a
textual JSON index specification.
Existing indexes can be dropped using SodaCollection.dropIndex().
A JSON search index is used for full-text and ad hoc structural queries, and for persistent recording and automatic updating of JSON data-guide information.
See Also:
-
Oracle AI Database Introduction to Simple Oracle Document Access (SODA) for an overview of using SODA indexing
-
Oracle AI Database Introduction to Simple Oracle Document Access (SODA) for information about SODA index specifications
-
Oracle AI Database JSON Developer’s Guide for information about JSON search indexes
-
Oracle AI Database JSON Developer’s Guide for information about persistent data-guide information as part of a JSON search index
Example 8-18 Creating a B-Tree Index for a JSON Field with SODA for In-Database JavaScript
This example creates a B-tree non-unique index for numeric field
department_id of the JSON documents in collection
employeesCollection (created in Example 8-8).
export function createBTreeIndex(){
// open the collection
const col = soda.openCollection('employeesCollection');
if(col === null){
throw new Error("'employeesCollection' does not exist");
}
// define the index...
const indexSpec = {
"name": "DEPARTMENTS_IDX",
"fields": [
{
"path": "departmentId",
"datatype": "number",
"order": "asc"
}
]
};
//... and create it
try{
col.createIndex(indexSpec);
} catch(err){
throw new Error(
`could not create the index: ${err}`
)
}
}
Example 8-19 Creating a JSON Search Index with SODA for In-Database JavaScript
This example shows how to create a JSON search index for indexing the
documents in collection employeesCollection (created in Example 8-8). It can be used for ad hoc queries and full-text search (queries using QBE
operator $contains). It automatically accumulates and updates data-guide
information about your JSON documents (aggregate structural and type information). The index
specification has only field name (no field fields unlike the B-tree
index in Example 8-18).
export function createSearchIndex(){
// open the collection
const col = soda.openCollection("employeesCollection");
if(col === null){
throw new Error("'employeesCollection' does not exist");
}
// define the index properties...
cost indexSpec = {
"name": "SEARCH_AND_DATA_GUIDE_IDX",
"dataguide": "on",
"search_on": "text_value"
}
//...and create it
try{
col.createIndex(indexSpec);
} catch(err){
throw new Error(
`could not create the search and Data Guide index: ${err}`
);
}
}
If you only wanted to speed up ad hoc (search) indexing, you should specify a value of
"off" for field dataguide. The dataguide indexing feature
can be turned off in the same way if it is not required.
Example 8-20 Dropping an Index with SODA for In-Database JavaScript
This example shows how you can drop an existing index on a collection using
SodaCollection.dropIndex() and the force
option.
See Example 8-8 for details about how to create employeesCollection, used
in this example.
export function dropIndex(indexName){
// open the collection
const col = soda.openCollection("employeesCollection");
if(col === null){
throw new Error("'employeesCollection' does not exist");
}
// drop the index
const result = col.dropIndex(indexName, {"force": true});
if(!result.dropped){
throw `Could not drop SODA index '${indexName}'`;
}
}
SodaCollection.dropIndex() returns a result object containing
a single field: dropped. Its value is true if the
index has been dropped, otherwise its value is false. The method
succeeds either way.
An optional parameter object can be supplied to the method. Setting
force to true forces dropping of a JSON index if the
underlying Oracle AI Database domain index does not permit normal dropping.
Parent topic: Using SODA for In-Database JavaScript