(Mike Mitchell)
9/4/2011 7:49:00 AM
On Sat, 03 Sep 2011 16:02:26 -0400, GS <gs@somewhere.net> wrote:
>MM explained :
>> On Sat, 03 Sep 2011 10:51:08 -0400, GS <gs@somewhere.net> wrote:
>>
>> I've taken a different approach altogether. I found (took me three
>> hours of Googling) how to use ADOX to link an Access table
>> programmatically from an external mdb to the main mdb, and then I was
>> able to 'hook' the linked table into a single parameter query. So,
>> with a (for me!) VERY complex bit of SQL I search the index and get
>> the data in one operation, and it's very fast indeed.
>>
>> Result: Retrieve 11,000 records on two search terms (using AND) was
>> taking 35 secs. Now it takes 1426 ms!
>>
>> This is on a 2.8 Sempron and ABit mobo from circa 2008 with approx
>> 458 MB RAM and Windows 2000.
>>
>> MM
>
>Sounds good! Care to share your approach...?
I will in detail when I've completed the prototype. Basically, it's
very simple: Take the text field on which you want to search as
quickly as possible, separate the individual words, e.g. the, cat,
sat, on, the, mat, then remove noise words on, the etc. Remove
punctuation noise as well, like $£"!;@ etc. Then add each word to a
separate mdb once only in a table (with index in ascending order)
called Words. Have another table called RecordNumbers and each time a
word is added, also add the record number of the record from which the
word was extracted. When another occurrence of the same word is found,
append just its record number to the RecordNumbers table.
Searching: Accept one or more words from the user (at present I'm only
testing with a maximum of two words). Pass the word(s) through the
same rules as when constructing the index. Search for each word in the
index and retrieve the corresponding pointers from the RecordNumbers
table. In an AND conjunction, the record numbers will be the same.Then
finally retrieve the records in question and display them.
MM