Project 2018 – 2020 · archivedZyperSearch

The clever search engine from next door

Prototype of a web search engine with a crawler network, full-text search and AI-assisted image search – built in 2018/2019 as a bachelor's thesis at Hochschule Merseburg.

The idea

Build a search engine yourself – from the crawler to the search form

ZyperSearch was an attempt to build a complete information retrieval system from scratch: a network of crawlers collects web pages, documents and images, a server stores everything in a database, and a web front end answers queries. Classic full-text search for text, a neural network for images.

Full-text search

Boolean search over title, meta keywords and page content, stored in MySQL. Results are ordered by hit frequency – a later iteration added a ranking of search terms.

Image search with a neural network

Every image found is classified with TensorFlow (Inception model) and scanned for text with Tesseract OCR. So you search for what is in the picture – not just its file name.

Documents included

PDF, Word, Excel and PowerPoint files are read with Apache PDFBox and Apache POI and indexed like web pages. The search form filters by web pages, PDF and Office.

Architecture

Three separate modules, connected by sockets and a database

The prototype ran inside the Hochschule Merseburg intranet: crawlers on lab PCs and two retired servers, the database and web server in the DMZ. Each crawler asks the server for the oldest unprocessed link (FIFO), analyses it and reports content, MIME type and newly discovered links.

Crawler network

Network A · university intranet

  • 6 lab PCs + 2 old servers, Ubuntu 16.04
  • Java, jsoup for HTML, PDFBox/POI for documents
  • TensorFlow Inception + Tesseract OCR for images
  • Client-side cache against duplicate links
fetch link / report result

Server

Network B · university DMZ

  • Dell PowerEdge T300, Ubuntu 18.04
  • Java socket server, port 2156
  • MySQL: tables Hosts, Links, Emails
  • FIFO hand-out of the oldest link, timestamps
query / hits

Web front end

Apache Tomcat 9 · port 8080

  • JSP + servlet, Ajax requests with XML responses
  • Standard search, image search, statistics
  • Results: title, link, 140-character snippet
  • Footer shows the number of known links (cached)

Opened ports: SSH 22022 and web 8080 from the internet, crawler interface 2156 from the intranet – every port had to be requested from the network administrator.

Facts & figures

55 M

Known links

as of March 2019, according to the search form footer

20 M

Records in the test run

after which an SSD RAID 0 was added for MySQL

8

Crawler machines

6 lab PCs + 2 former university servers

Dell PowerEdge T300

Server

Xeon X3363, 4 cores, 20 GB RAM

16

Repositories

crawler variants, server, image recognition, web, API

102 pages

Length of the thesis

6 chapters, 26 figures, 88 references

Tech stack

As of 2019/2020 – deliberately not modernised

Core

Java 8MySQL 5.7Apache Tomcat 9JSP + ServletsJava SocketsAjax / XMLUbuntu 16.04 / 18.04jsoupc3p0

Analysis

TensorFlow 1.12 (Inception)Tess4J / Tesseract OCRApache PDFBoxApache POIMySQL Fulltext

Later experiments

MPJ Express (HPC-Cluster-Crawler)Android-CrawlerRaspberry Pi AutoupdaterMaven + JPA.NET Core APIC#-Launcher

The prototype in action

Screenshots from the thesis (figures 23–25)

Screenshot der ZyperSearch-Suchmaske 2019
Fig. 23: The search form – logo, input, filters and the counter of known links.
Screenshot der Suchergebnisse für den Begriff cat
Fig. 24: Results for “cat” – title in blue, link in green, the first 140 characters as description.
Screenshot der Bildersuche mit Katzenbildern
Fig. 25: Image search for “cat” – the neural network recognised cat pictures, all scaled to a height of 100 px.

The cats stayed: years later, the image search turned into the idea for CatCatch, our app for stray cats. cat-catch.de

History

From the first search form to this website

2018

Idea and first crawlers

Project start alongside the degree: crawler clients in Java, socket server and MySQL schema. First test runs on the university network with retired server hardware.

29.12.2018

First search form

The web front end is born on Tomcat: main.jsp with logo, input and a “Suchen!” button, plus the image search.

01.2019 – 02.2019

Search options and Boolean search

Filters for web pages, PDF and Office, search on Enter, Boolean combination of search terms.

11.03.2019

Thesis submitted

102 pages on information retrieval, neural networks and the prototype. On 28 March 2019 the university library publishes the thesis under CC BY 4.0.

2026

zypersearch.de

This project site goes live. The cats from the image search live on in CatCatch.

Honest conclusion

What the prototype showed – and what it did not

“As the development of the prototype has shown, a good web search engine should not follow just one of the two approaches, but combine both.”

— Chapter 6, conclusion (translated)
  1. 1

    For phrase search, classic text analysis is largely sufficient. Neural networks only add value there once usage data is available to personalise the ranking.

  2. 2

    For image search, neural networks are indispensable: people search for what is in a picture, and only the network can see that. Titles and OCR text still mattered because the Inception model was not trained on proper names.

  3. 3

    Scaling requires clustering and strictly encapsulated modules. New links belong in a temporary database first, which is optimised before it replaces the search database.

  4. 4

    The market leaders are successful for a reason. A new search engine could only hold its own in Europe by playing by different rules: fully transparent, open source, ad-free, donation-funded and hosted in Europe.

  5. 5

    Realistically, no new search engine will dethrone a market leader. The prototype did show, however, that a complete retrieval system is feasible with university resources.

Curious?

Read or download the full thesis, or try the old search form yourself.