argh.. had some app-specific code.. here you go, a clean version the
should work out of the box.

def get_permutations(string):
    newfragments = []
    tokens = string.lower().split(' ')
    tokens = list(set(tokens))
    for token in tokens:
        for n in range(2, len(token) + 1):
            if not n in newfragments:
                newfragments.append(token[0:n])
    return " ".join(newfragments)


On May 16, 1:35 am, Jakob Holmelund <[email protected]> wrote:
> Well there is a way..
>
> You could permutate the fields you would like to be able to partially
> search and add that as a textfield. I use
>
> def get_permutations(string):
>     newfragments = []
>     tokens = string.lower().split(' ')
>     tokens = list(set(tokens))
>     for token in tokens:
>         try:
>             token = unicode(token, 'utf-8')
>         except TypeError:
>             #logging.info(token)
>             for n in range(2, len(token) + 1):
>                 if not n in newfragments:
>                     newfragments.append(token[0:n].encode('utf-8'))
>     return newfragments
>
> this splits up the string into tokens down to two letters per word, so
> for example
>
> "This is a property"
>
> would become
>
> "th thi this is pr pro prop prope proper propert property"
>
> Seems to work great.. Im not quite sure how efficient this is but it
> works..
>
> On May 14, 11:50 pm, dennis <[email protected]> wrote:
>
>
>
>
>
>
>
> > Have to admit I was very excited about this when I first saw the
> > experimental release.
>
> > Sadly I ran into a problem right away with partial word matching. Yes
> > I know this is not supposed to work and I have code that executes
> > datastore "starts with" queries when we get 0 results for a short
> > single word query.
>
> > The more interesting problem occurs at one fully matched word and a
> > partial match on the second word of a query.
>
> > Example:
> > I have a document with a "name" field set to "foo bar" and about 999
> > other documents with the "name" field set to "foo <any word that
> > doesn't contain "bar" in it>"
>
> > When I do a query for "foo ba" I get 0 results from the Search API.
> > and when I do a query for "foo" I get 1000 results. Out of those 1000
> > results I really want "foo bar" to be at the top but since it's only a
> > partial match it can end up anywhere in the result set.
>
> > The only way I've come up to get around this is do result merging that
> > breaks up the query into individual words and if still not finding
> > much then uses datastore "starts with" queries.
>
> > If anyone has suggestions/ideas for other ways this can be implemented
> > I'm all ears.
>
> > - Dennis.

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en.

Reply via email to