Design of the Full Text Query Feature in LiveNote

LiveNote cases typically contain hundreds of documents.  Because of the sheer volume of data, full text searching is one of the most important ways that users find the information they need.  The full text query feature has been designed to provide a rich interface to the underlying search engine for advanced users, while still allowing novices to perform simple searches without being overwhelmed.

The full dialog is shown below:

Query

LiveNote's query language uses the operators "and", "or", "not", "near" and "like", as well as the wildcard "*" (matching any number of characters) and "?" (matching any single character).  Most LiveNote users already have experience with some form of boolean querying, so the basic form of queries is familiar.  The user enters the search text in the Query field:

For experienced users, the ability to type a query directly has proven preferable to form-based dialogs where they pick the search terms and operators from a series of combo boxes.  The latter may be helpful to a novice but soon becomes cumbersome and restrictive.  It also consumes a large amount of screen space.

To assist the novice, LiveNote provides a context-sensitive popup menu, activated by selecting a word in the Query field and pressing the right mouse button.  The popup menu displays the search terms available using the selected word:

Note that the wildcard query "second*" is displayed as the English phrase "beginning with second"; similarly, the query "*second" is displayed as "ending with second".  The novice user can build complex queries by simply typing search words into the Query field, then using the popup menu to choose connecting operators.  This provides an easy way to learn the language while building queries, without cluttering the dialog for an experienced user.

The Query field also provides a drop-down list of previous queries:

Using the Export Queries button, the user can save a set of queries from the list to a file; similarly, using the Import Queries button, the user can load a set of queries into the list from a file.  This allows query sets to be reused, and exchanged between users.

Vocabulary

Below the Query field is the Vocabulary list, containing every word in the document set:

The current word in the Vocabulary list is continually updated as the user types in the Query field.  This provides assistance in both the exact spelling of a word, and the variations on the word that exist in the document set.  As with the Query field, a context-sensitive popup menu is provided, activated by selecting a word in the Vocabulary list and pressing the right mouse button:

This allows novice users to create complex queries using only the mouse; they select words from the list, then use the popup menu to choose connecting operators.

Preview

As the user types a query, the number of hits in matching documents is displayed at the bottom of the dialog:

This provides instant feedback on the progress of the query.  The preview update is performed whenever the dialog is  idle.  With typical document sets, this is fast enough to update as each keystroke is typed with no delay apparent to the user.  With usually large document sets on slower machines, the preview could conceivably take enough time that it slows the user's typing.  In this case, the user can optionally disable previewing by deselecting the Auto Preview checkbox.  The user can still manually preview the number of hits at any time by pressing the Preview button.

Search

The Search checkboxes are used to specify the information searched.  This includes document text, as well as the information stored in annotations on the text:

The number of hits in the Preview list is automatically updated whenever the set of searched items is changed.

Nearness and Fuzziness

The query language allows users to search for words that appear within a certain proximity to one another using the "near" operator.  LiveNote offers a novel way of specifying the proximity: instead of requiring that users type a specific number of words, the proximity is determined by  the Nearness slider control:

As the user drags the slider, the query is continually re-evaluated with the current Nearness setting, and the Preview list of hits is updated.  This provides a powerful feedback mechanism.  Typically, users do not have a specific proximity in mind when they perform a "near" query; rather, they want to select a proximity that results in a manageable number of hits.  Most full text query languages require the user to specify an exact number, which makes the process of arriving at a useful value extremely cumbersome.  The combination of a textual operator with a graphical controller provides a much more interactive (and efficient) technique.  Note that for queries where a specific proximity is required, the query language allows it to be specified (for instance, "near2w" for "within two words", or "near3s" for "within three sentences").

The Fuzziness slider provides a similar interface to finding minor variations in words caused by misspellings, particularly in OCR'd documents.  The "fuzziness" setting determines the percentage of letters in a word that may be missing, inserted, or transposed while still generating a hit.  For instance, at a setting of 20 percent, a five-letter word can have one missing letter, one extra letter, or two transposed letters compared to the search word, while still being considered a match.  As with the Nearness slider, changed to the Fuzziness setting are reflected in the Preview list of hits as the user drags the slider.

Query Results

The Full Text Query dialog shows the number of hits in matching documents as a query is typed.  To view the hits in context, the user accepts the query by pressing the OK button.  A Query Results window is then displayed in the LiveNote workspace:

This window initially provides continuity with the Full Text Query dialog: the matching documents are displayed as a list of folders, the same information that was displayed in the Preview list of the dialog.  To view the lines of text containing hits in a document, the user double-clicks on a folder.  The folder then opens to show the hits:

The Query Results window effectively provides a second level of preview for users: not only the number of hits, but also the immediate context.  This has proven extremely useful.  Many search interfaces simply provide Previous/Next buttons to step through hits in context within the document.  In most instances, this is extremely inefficient; instead, a line of text with the matching word shown in bold, as above, allows the user to pinpoint the hits of interest without wading through the entire document.

Further visual cues are provided by the single letter at the beginning of each line above.  The letter 'T' indicates that the hit is within the document text as opposed to an annotation.  The yellow background behind the 'T' on the last hit above indicates that the hit is contained within text that has been annotated.  This is particularly important; for many users, annotated text is by definition more interesting than non-annotated text, and the highlighting draws attention to it.

To view a hit in its original document context, the user double-clicks on an item in the Query Results window.  The document is displayed with the matching text selected:

To step through hits, the user presses the Previous Hit or Next Hit buttons on the Query Results window.  As the previous or next item is selected in the Query Results window, the document is automatically updated to show the current  hit in context.

Conclusions

The LiveNote Full Text Query feature has been continually improved based upon the feedback of many users at different levels of experience.  The current implementation strikes a balance between the needs of novices and experts, combining a rich query language with tools to make it accessible to the beginner.  Query results are displayed in increasing detail, providing the user with immediate feedback as the query is formulated, an efficient overview as the results are browsed, and quick access to hits in context when required.