Fast Binary Search

### Index Up << >>

## Fast Binary Search

Fast binary searching is useful for scanning large databases for strings that match the beginning of a line. They use the standard Perl module Search::Dict, and are enabled through use of the mv_dict_look, mv_dict_end, mv_dict_limit, mv_dict_fold, and mv_dict_order variables.

The field to search is the first field in the file, then the product code should be in the second field, delimited by TAB. You will also have to set mv_return_fields=1 to return the product code in the search.

The search must be done on a dictionary-ordered pre-built index, which can be produced with the database INDEX modifier. See Dictionary indexing with INDEX.

If you use the mv_dict_look parameter by itself, and the proper index file is present, MiniVend will set the options:

        mv_return_fields=1
        mv_dict_limit=-1

This will make the search behave much like the simple search described above, except it will be much faster on large files and will match only from the beginning of the field.

Here is an example. You have built a title index by including in catalog.cfg:

        Database   products   INDEX    title

NOTE: The ASCII source file must be ``touched'' to rebuild the index and the databse.

Now you can specify in a form:

        <FORM ACTION="[process href=search]" METHOD=POST>
        <INPUT TYPE=hidden NAME=mv_dict_limit VALUE=title>
        <INPUT NAME=mv_dict_look>
        </FORM>

or in a URL:

        [page search="dl=Van Gogh/di=title"]

This search is case-sensitive. To do the same thing case-insensitively:

        Database   products   INDEX    title:f

        <FORM ACTION="[process href=search]" METHOD=POST>
        <INPUT TYPE=hidden NAME=mv_dict_limit VALUE=title>
        <INPUT TYPE=hidden NAME=mv_dict_fold  VALUE=1>
        <INPUT NAME=mv_dict_look>
        </FORM>

        [page search="dl=Van Gogh/di=title/df=1"]

### Index Up << >>