Beim Aufbau eines Volltextindex für eine Java Webanwendung bin ich diese Tage auf Solr gestoßen. Aufbauen auf der bekannten Apache Lucene Engine stellt Solr einen Suchserver bereit, mit dem man mit Hilfe einer REST API kommunizieren kann.
Dabei erweitert Solr Lucene um viele interessante Dinge und bringt auch noch eine grafische (web basierte) Administrationsoberfläche mit. Für alle Anwendungen die effizient über große Datenmengen suchen müssen sollte man sich das Apache Projekt auf jeden Fall einmal ansehen.
Die meisten meiner Webanwendungen haben, zumindest sofern sie mit HTTP GET arbeiten relativ kryptische URLs, die sich letztlich auf Datenbankschlüssel, Suchparameter und ähnliches zurückführen lassen. Das sieht zwar nicht unbedingt schön aus, hat aber bisher ganz gut funktioniert.
Leider scheinen da gegen nicht nur einige Benutzer sondern auch ne ganze Menge Internet Suchmaschineen eine Abneigung zu haben, so dass ich versucht habe das zu ändern, möglichst ohne komplette Anwendungen neu zu schreiben. Die Standardlösung für mich ist mod_rewrite in einen vorgeschalteten Apache einzubinden und zu konfigurieren. Das funktioniert, erfordert aber das ich vor meinen lokalen Tomcat nen Apache httpd schalte, wo mir erst mal der Aufwand zu hoch war. Also habe ich nach einer reinen Java Lösung gesucht und bin fündig geworden.
Der UrlRewriteFilter liefert als Servlet Filter sowohl die Möglichkeit ausgehende URLs nach einem bestimmten Muster (auf Basis von Regulären Ausdrücken) zu parsen, als auch eingehen URLs entsprechend einer Konfigurationsdatei umzuändern.
Positiver Nebeneffekt der reinen Java Lösung, ist dass Servlet Filter natürlich nicht nur Zugriff auf URLs und Parameter sondern auch auf den ServletContext und die HTTP Session haben. Dadurch kann man sehr schön jedem Link bestimmte Session Parameter (z.B. die aktuelle Sprache oder andere Einstellungen übergeben). Die so erzeugten Links sind dann mehr oder minder Stateless und können problemlos gebookmarkt oder auch weitergegeben werden.