views:

922

answers:

2

I'm looking into implementing full text search on our Firebird database. Our requirements are:

  1. Every field in several tables should be indexed. When a result is found we should be able to find out the originating table.
  2. The index can be stored in the database or in the file system.
  3. The results of the search (BigInt primary keys) must be used to join with the original records in the database to display the records in a table.

Can anybody recommend a decent way to achieve what we need? I've looked at somehow integrating DotLucence into Delphi, but can't really find very much information on how to go about it.

+5  A: 

Here are a few resources for you to consider:

  • Sphinx very powerful and popular free open source full-text search engine.
  • Textolution Fulltext search for Interbase and Firebird.
  • IBObjects Full Text Search ("Fuzzy Search") module, a fully working module that can be used to set up your search indexes or as a model for your own custom implementation.
  • Rubicon is a Delphi add-on that lets you put full text search capabilities into your applications.
  • Fulltext Search for Firebird SQL By Dan Letecky on CodeProject using DotLucene full-text search engine.
  • Mutis is a Delphi port of the Lucene Search Engine. Provide a flexible API for index, catalog and search text-based information with great performance. Excelent for implement custom search engines, researching, text retrieval, data mining and more.

There is a fork of Firebird code made by a company called Red Soft. It's licensed under the same license as Firebird, so you can take a look at their version which can support full-text searches using Lucene engine via JavaVM interfaces.

You can also read a paper titled "Full text search in Firebird without a full text search engine" by Bjoern Reimer and Dirk Baumeister, presented at 4th Firebird Conference.

Jim McKeeth
Great list, Jim!
gabr
Thanks Jim. I've looked at most of them, but never found Mutis. I'm downloading now. BTW, are you using FTS in your Twitter project? If so, which did you choose?
norgepaul
We are currently planning to use DISQLite3, but the client has been on hold. Delphi Live! and then family in town. Things are quieting down and now I have crunch time at work.
Jim McKeeth
A: 

I think you will have a problem with requirement 2: The index can be stored in the database or in the file system. Most indexing services create their own index file which stores data in a highly optimized way. If you really want it, maybe it is possible to load and save an index to a single blob field but I don't really see a reason for this.

birger