One of the early problems found with the Fedora software was its search service was very basic. The basic search service only allows searching across Dublin Core datastream elements, doesn’t provide complicated Boolean logic, and has a limited API interface. The Fez programming team also looked at the Fedora bundled Kowari Resource Index. It provides Dublin Core and also RELS-EXT searching, however the Fez design specification required the ability to search across any element in any datastream on an object. Also it was found the Kowari implementation at the time didn’t fully support all the ITQL syntax specification and documentation for creating queries. It was found to be too basic with some example queries not running as documented. Due to these limitations, the team decided to create its own Fez index and search system utilising the power of MySQL Full Text Boolean searching [HREF23].
In the XSD HTML matching editor the team added the ability to specify an XSD element is to be indexed. Whenever a Fez object is created or updated the workflow system will scan for XML element matches that are specified to be indexed and either replace or insert an index entry for the element.
A Fez “Search Key” administration panel was added which allows users to specify the common classifications for commonly searched against attributes (eg title, author, subject). This administration panel also configures what types of fields are shown on the advanced search form and what search keys are used in basic searches.
The XSD HTML matching form allows the assignment of a search key against a XSD element. This allows users to search against elements such as “Title” and get results based on not just Dublin Core Title but any XML element or attribute the content model designer wishes to associate with that search key.
Fez searches match against the index and as of Fez 1.2 can return results based on MySQL Boolean logic [HREF23] and are ordered by search relevancy by default.
One key requirement of the Fez index was that if some or all of the Fez MySQL index was corrupted or irretrievable it could be regenerated by a re-index of the backend Fedora repository. This is achieved with the Fez admin panels “Index Fedora Object into Fez” and “Reindex Fez Fedora Objects”. The former scans for Fedora objects that have no mention in the Fez index at all, while the latter allows index repairing of selected Fedora objects that have at least some mention in the Fez index. The former also allows for Fedora objects to be ingested for repositories with existing objects by adding Fez administration technical and security metadata: FezMD, FezACML, and RELS-EXT if missing.