On this page

Reversed Index

Search query using reversed index mixed with other indexes

This also can be done with WIDE_TABLE type only.
Therefore to allow reversed index / indeing in the table, we need to create or open table like following;

table_env tenv;
tenv.set_table_type(WIDE_TABLE);
tenv.set_rev_idx(true);
bangdb_table *tbl = bdb->getTable("mywidetable", &tenv);

Now taking the same document as above, let’s say we would like to reverse index the content of the field “fav_quote”,
then we would like to add following during put

const char *rev_idx = "{"_rev_idx_all":0, "_rev_idx_key_list":["fav_quote"]}";
//note that _rev_idx_all if set 1 then it will reverse index all the fields in the doc.
//Also _rev_idx_key_list is not required in that condition tbl->put_doc(doc, NULL, rev_idx, INSERT_UNIQUE);

Now to scan for query like above but will add reverse idx condition

const char *query = {
   "query":[
      {
         "key":"name",
         "cmp_op":4,
         "val":"sachin"
      },
      {
         "joinop":0
      },
      {
         "key":"address.city",
         "cmp_op":4,
         "val":"Bangalore"
      },
      {
         "joinop":0
      },
      {
         "match_words":"wall, bridge",
         "joinop":0,
         "field":"fav_quote"
      }
   ]
};
// now call the scan same way to get the data

Please note, we could use primary key filter every where by passing the keys during scan.
We could also put normal text (not json doc) and scan using put_text and scan_text.
In case of put_text(), db will reverse index the input text.

For scan, simply create a list of all the tokens for search in a char*[] and then call scan_text()

Was this article helpful to you? Yes No