Searching magma string indices
Brent Pinkney
brent at zamail.co.za
Fri Mar 2 13:46:29 UTC 2007
Hi Chris,
> Hi Brent!
>
> I think you've cleverly solved your own question.. By indexing the reversed value, its no different than a keyword index where you can already query on the presence of multiple keywords, as in:
>
> myArticles where: [ : each | (each keywords equals: 'Squeak') & (each keywords equals: 'Magma') ]
>
> So you would just have to convert the wildcards to multiple conjunctions, for example, 'foo%bar' would just have to be translated to:
>
> self people where:
> [ : each |
> (each familyName startsWith: 'foo')
> & (each familyName endsWith: 'bar') ]
>
> and the index would have something like:
>
> startsWith: aString
> self equals: aString
>
> endsWith: aString
> self equals: aString reversed
>
> You don't even need a separate "reversed" index, just add two entries (the forward and reversed) for each object added to the collection.
Domo arigato gozaimasu Sensei
> Now, the expression '%foo%bar%' goes beyond the first requirement of just searching on a prefix and/or a suffix.. For this a different type of index would be needed that adds every possible value for "Fredfoon Tobart", the following values:
>
> fredfoon tobart
> redfoon tobart
> edfoon tobart
> dfoon tobart
> foon tobart
> oon tobart
> on tobart
> n tobart
> tobart
> tobart
> obart
> bart
> art
> rt
> t
>
> Your '%foo%bar%' expression would then need to translate to
>
> (familyName from: 'foo' to: 'foo' maAlphabeticalNext)
> & (familyName from: 'bar' to: 'bar' maAlphabeticalNext)
>
> to find the object(s) that had "Fredfoon Tobart".
I must admit I am not following you here. Is this one of those Magma keyword indices which I have never managed to grok ?
Also, whilst you are hunting elephants, SQL has both % and ? wildcards: % is any sequence of characters inlcuding the empty string and ? is precicely one character.
So foo??bar would match fooABbar but not fooCDEbar and not fooFbar.
Any chance you could bend Magma's indices into managing expressions with a fixed number of ?s (e.g. ?foo????bar??baz???)
It is to darn hot here to think.
Brent
More information about the Magma
mailing list