pythongoogle-app-enginegae-search

Google App Engine - Using Search API Python with list fields


I'm using ndb.Model. The Search API has the following field classes:

    TextField : plain text
    HtmlField : HTML formatted text
    AtomField : a string which is treated as a single token
    NumberField : a numeric value (either float or integer)
    DateField : a date with no time component
    GeoField : a locale based on latitude and longitude

Suppose I have a 'tags' field which is a list field:

    tags = ndb.StringProperty(repeated=True)

How am I supposed to treat this field with search.Document?

Right now I'm turning tags list into a string:

    t = '|'.join(tags)

And then:

    search.TextField(name=cls.TAGS, value=t)

Any suggestions?


Solution

  • Use unique identifiers for each "tag". Then you can create a document like:

    doc = search.Document(fields=[
        search.TextField(name='tags', value='tag1 tag2 tag3'),
    ])
    search.Index(name='tags').put(doc)
    

    You can even use numbers (ids) as strings:

    doc = search.Document(fields=[
        search.TextField(name='tags', value='123 456 789'),
    ])
    

    And query using operators as you wish:

    index = search.Index(name='tags')
    results = index.search('tags:(("tag1" AND "tag2") OR ("tag3" AND "tag4"))')