The Bosworth-Toller Anglo-Saxon Dictionary is the largest dictionary of Old English to date. The first edition was published in 1838 on paper by Joseph Bosworth. Thomas Northcote Toller later revised the dictionary and from 1898 the dictionary was referred to as the Bosworth-Toller's Dictionary. In 1921 Thomas Northcote Toller issued a supplement with additional words and further explanations. The digital edition was started by Sean Christ in 2001 as a part of his Germanic Lexicon Project. In 2010 Ondřej Tichý built a website based on Sean Christ's data. However, in 2013 it was decided to modernise the dictionary and provide functions that weren't possible in the original solution.
Page with the entry Abbat in the Bosworth-Toller's Dictionary
Assigment and requests
The original project used slightly modified Drupal CMS. However, when mobile devices became more mainstream the original user interface was no longer sufficient. However, interface was not the only problem as the data was stored in HTML and contained a lot of OCR errors. I was asked to provide a new and clean interface and design a new backend architecture which would allow to store data in a customised XML format. The process of correction of OCR records is still ongoing and is under the leadership of Ondřej Tichý from the Faculty of Arts, Charles University.
Search in the Bosworth-Toller's Dictionary
Instead of relying on already existing CMS we decided to build our own backend PHP platform based on Laravel framework. This gave us maximum control over the processing of entries and how they are subsequently distributed to the API and web interface. Due to speed limits of XML databases it was decided to use a MySQL database, where entries are stored in plain XML and in deconstructed form which is then queried with backend. Since database queries do not provide such a range of options as specialized search engines, the Elasticsearch engine was used for the purpose of full-text search. This resulted in a much more efficient and reliable search than in the original application.
The entire application is divided into several Docker containers, which allows easy scaling or A/B testing of new features if necessary. Docker also makes it easier to update, since due to the separation of services, you only need to update one container.