Enhanced searches in WAIS databases

These remarks are borrowed from the release notes in the freeWAIS suite of programs. The enhancements cited below are implemented in the WAIS server and should be available to any user of a WAIS client such as waissearch, xwais, lynx, or mosaic.

Booleans

BOOLEANS == boolean 'and' and 'not' operators. This is at a simple level. There are no nesting symbols. Words are evaluated from left to right in the wais query string. When a 'not' operator is found, the following single word is moved into a buffer of not-words. This not-word buffer is evaluated after all the other words are evaluated. If a document match a not-word, that document is removed from the set of matches (given a score of zero).

When an 'and' word is found, the word following it is checked for matches to documents, and the the set of documents matching this and-word is compared to the set of documents matching any words prior to the and-word. The intersection of prior and current matching documents is retained, othe are removed (set to a zero score).

For example, this query

red and blue or yellow but not green and orange or black but not white will be interpreted like this (the parentheses just show the implicit left-to-right interpretation): (((((red and blue) or yellow) and orange) or black) not green) not white)

Partialword

PARTIALWORD == The asterisk symbol '*' is parsed if it immediately follows a word, as a key to search for all partial words that match the first part of the word.

Literal

LITERAL == The quote or double-quote symbols are interpreted, if they occur in pairs around a string, as requesting a literal match of the enclosed string. Any special symbols, 'and', 'not', and '*' inside a literal strin are not interpreted. The first part of a literal string must be a word that is indexed for that data, rather than a delimiter symbol, for a match to be found.