clear solution for fuzzy tasks
EXECryptor
strongest anti-crack & anti-piracy software protection and license management system with custom security level settings and ultra short serial number generation
[Example of usage]
Poehali ... or how to use FastTextSearch

FastTextSearch package contains EMPLOYEE.GDB database, where CUSTOMER, CONTACT_FIRST, CONTACT_LAST, ADDRESS_LINE1, ADDRESS_LINE2, CITY, COUNTRY fields are indexed in the CUSTOMER table.

The query allows to select all customer, which title contains lexical items "tech" or "corp" in this fields:

select *
from TS$Select_OR("customer","tech corp",0) TS
left join customer c on c.fts_id = ts.obj_id

Query result

Some remark: FastTextSearch/IB breaks up all string and text memo into words, and build index which contain this word. Searching for index is realized on coinciding beginning of word with sample. Hereupon, records, contain word "incorporated", will not be found at searching for word "corp".

Second sample query:

select *
from TS$Select_And("customer","hong kong",0) TS
left join customer c on c.fts_id = ts.obj_id

This query selects all customer title or name containing elements "hong" and "kong" in indexed fields:

Query result

FastTextSearch/IB also works in SoundEX search mode:

select *
from TS$Select_OR("customer","jon",1) TS
left join customer c on c.fts_id = ts.obj_id

Select all customer title/name with SoundEX containing lexical elements equal to SoundEX("jon"):

Query result

Quick and fast ... or analysis of performance.

"OR" Query with 2 words

select *
from TS$Select_OR("customer", "tech corp", 0) TS
left join customer c on c.fts_id = ts.obj_id

graph 1

"AND" Query with 2 words

select *
from TS$Select_And("customer", "hong kong", 0) TS
left join customer c on c.fts_id = ts.obj_id

graph 2

"OR" SoundEX Query with single word

select *
from TS$Select_OR("customer", "jon", 1) TS
left join customer c on c.fts_id = ts.obj_id

graph 3

Brought diagrams show that only indexed access to data is used!