6.5.3. Multiple Layer Search tab

The Multiple Layer Search tab houses the most comprehensive search in ELAN. Similar to the Single Layer Search tab a Query History is kept, enabling the user to go back and forward a query by clicking the < and > respectively. The two modes case sensitive/case insensitive and substring match/exact match/regular expression are also similar to the second tab. The first new element is the Clear-button. Clicking this button will clear all data of a query.

The buttons Minimal Duration and Maximal Duration enables you to constrict the minimal and maximal duration of each result. When you click on one of the buttons, a dialog window appears, e.g.:

Minimal Duration

Figure 6.19. Minimal Duration


Here you can enter the minimal or maximal duration as the total number of milliseconds or in hours:minutes:seconds.milliseconds. A value of 0 milliseconds or 00:00:00.000 yields as undefined. Searching for annotations with a maximum duration being less then the minimum duration is impossible. Hence, entering conflicting values results in an error message saying that the combination is impossible. After entering a correct duration, it will be displayed in the corresponding button.

The buttons Begin After and End Before give a dialog similar to that of the previous two buttons. They give the possibility to restrict the annotations in the result to begin after a certain time and end before a certain time. Entering a Begin After-time that is greater than the End Before-time or vice versa results in an error message saying it is impossible. After entering a correct time, it will be displayed in the corresponding button.

Search string and constraints

Beneath the buttons discussed above, you will find a table consisting of white and green fields. Search strings are entered in the white fields while a green field between two non-empty white fields must contain a constraint. The fields on one row give the search strings and constraints to be matched by annotations on one tier. The result of having three rows in the query table is that the search engine may find annotations on three tiers as one hit. Furthermore, it is possible to restrict the search to one (type of) tier for each row by choosing the appropriate option in the pull-down menu on the right of each row.

Let us first take a look at search strings and constraints in one row. If you enter two search strings in two white fields separated by a green field, you must fill in that green field i.e. make a constraint. Right clicking on the green field gives a context menu offering the following constraints:

When you click on Find and there is an empty constraint between two non-empty search string fields, you will get an error message. You will also get an error message if there is an empty search string field and constraint fields between two non-empty search string fields.

As we saw earlier the search mechanism on this tab has the possibility to construct a query for up to three tiers. Besides the constraints on annotations on a tier, one can also apply constraints on annotations on different tiers. This means that if the search engine has found an annotation that matches a search string on one tier, the engine looks if the search string for another tier can be matched on another tier while considering the constraint that is between the two search strings.

The top down hierarchy of the rows in the query table does not reflect the hierarchy of the tiers in your data. That means, for instance, that search strings and constraints in the upper query table row may be matched by a child tier of the tier that matches search strings and constraints in the middle query table row.

Right clicking the green field between two search strings gives a context menu with the following constraints:

An example of a Multiple Layer Search with constraints is shown in Figure 6.20:

Multiple Layer query

Figure 6.20. Multiple Layer query


Because the search mechanism offers the possibility to search for patterns in three tiers and there are possibly three search strings per tier, the search results also consist of nine elements per hit. Instead of presenting a hit in the form of a table it is presented on one line with indicators for tiers and annotations. Figure 6.20 shows the results of the query above. As you can see the tiers in the result are indicated by #1, #2 and #3 corresponding to the upper, middle and lower query table row respectively. The annotations in a tier are surrounded by vertical bars indicating their start and end.

Figure 6.20 also illustrates what to do if you would like to use both Exact match and Substring match in one query: use the Regular expression. In places where you would like to have an exact match use the ^ and $ signs to match the beginning and end of a string (e.g. ^of$) otherwise just enter a word for the substring match.

The figure also show how to use a wildcard to match anything. Instead of using the # as in the Single Layer Search, you can use the regular expression .+ to indicate any character (the dot) one or more times (the plus). See also Appendix A for more on regular expressions. The NOT(...) construction on the other hand can be used in the Multiple Layer Search in the same way as describe in Section 6.5.2.

One final but not less important remark concerns the placing of more and less restrictive search strings. Figure 6.20 shows a very restrictive search string in the upper row: ^n$. The less restrictive, or should we say unrestrictive, search string .+ is in the middle row. As we saw earlier, the hierarchy of the rows in the query does not reflect the hierarchy in the data. That means that the search string ^n$ could also be placed in the lower row and not affect the outcome of the search. While this is perfectly true, we advise you to place restrictive search strings in the left most field on the upper most row possible and the least restrictive search string in the right most field of the lowest row possible. The reason for this is the order in which the search engine considers the search strings in the query. If it finds a restrictive search string it can filter out all the other possibilities, but if it finds a less restrictive search string it has to consider all the matches of this search string. In the example of Figure 6.20 it is clear that if ^n$ is in the bottom row, the search engine first considers all annotations matching .+ which is in fact all annotations in the search domain. Because of this, the search takes much more time than if ^n$ was in the upper row.