问题
I'm looking into implementing full text search on our Firebird database. Our requirements are:
- Every field in several tables should be indexed. When a result is found we should be able to find out the originating table.
- The index can be stored in the database or in the file system.
- 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.
回答1:
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.
回答2:
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.
来源:https://stackoverflow.com/questions/952830/full-text-search-with-firebird-and-delphi