'Returns a list of results from Productwiki for the given query.
Each Result.reviews is a list of (review, score)-items.
- type : SEARCH,
- start: maximum undefined,
- count: 20,
- sort : RELEVANCY.
There is no daily limit.'

def search(self, query, type=SEARCH, start=1, count=10, sort=RELEVANCY, size=None, cached=True, **kwargs):

    if (type != SEARCH):
        raise SearchEngineTypeError
    if ((not query) or (start < 1) or (count < 1)):
        return Results(PRODUCTWIKI, query, type)
    url = (PRODUCTWIKI + '?')
    url = URL(url, method=GET, query={'key': (self.license or ''), 'q': query, 'page': start, 'op': 'search', 'fields': 'proscons', 'format': 'json'})
    kwargs.setdefault('unicode', True)
    kwargs.setdefault('throttle', self.throttle)
    data = URL(url).download(cached=cached, **kwargs)
    data = json.loads(data)
    results = Results(PRODUCTWIKI, query, type)
    results.total = None
    for x in data.get('products', [])[:count]:
        r = Result(url=None)
        r.__dict__['title'] = u(x.get('title'))
        r.__dict__['text'] = u(x.get('text'))
        r.__dict__['reviews'] = []
        reviews = (x.get('community_review') or {})
        for p in reviews.get('pros', []):
            r.reviews.append((p.get('text', ''), (int(p.get('score')) or (+ 1))))
        for p in reviews.get('cons', []):
            r.reviews.append((p.get('text', ''), (int(p.get('score')) or (-1))))
        r.__dict__['score'] = int(sum((score for (review, score) in r.reviews)))
        results.append(r)
    results.sort(key=(lambda r: r.score), reverse=True)
    return results
