Friday, July 18, 2008

Hibernate & Lucene - a new ui experience

I was working on my little open source project Mango some months ago when I stumbled across hibernate search. Hiibernate search gives you the ability to manage a full-text lucene index on your relational database. This looked interesting to me so I gave it a try.

What can I tell you about my experiences ? First it came to me that I can handle the german umlaut problem with a special tokenizer. So searching for Müller gives you Müller as well as Mueller, something that is hard to to in plain HQL/SQL. But thats not the point. By having a fulltext index I could throw away all the UI parts where users could query the database for objects. They became completely obselete, because of now we have a central single database query that consists of a single text field as you know it from google for e.g. Thats all we need in the whole application to query the database. I needed to revamp the whole application ui, but it really was worth the effort in means of user experience. We all know UIs for database queries. We don't have them anymore because of the lucene index on the database. The user types in a keyword and lucene gives him all the objects, no matter what type that match his query.

I'm currently thinking of building a more sophisticated query assistant, so that users are more easily empowered of all the lucene query possibilities. For know I had to explain some of the core features of lucene queries to my users, but that could even be easier with a simple assistant.

For a second I wished that we had a relational database that has this ability built in, but that doesn't make sense because of the heterogenuous query results.

I really think that hibernate search should be much more popular, as it revolutionizes user experience on database centric applications. There are some features I still miss, but what we have up to now is ready for the real world.