def search(): q = request.args.get('q') query = FT.QueryStringQuery(q) results: FT.SearchRequest = cb_media.search('titles_search_idx', query, limit=20, facets={ 'genres': FT.TermFacet('genres', limit=10), 'titleType': FT.TermFacet('titleType', limit=10) }, fields='originalTitle') #title = cb_media.get(title_id).value hits = [] for result in results: hits.append(result) #for f in results.facets['genres']['terms']: # print(f) resp = {} resp['meta'] = results.meta resp['hits'] = hits #resp['facets'] = results.facets return make_response(jsonify(resp)), 200 INDEX_DEF: str = """
def test_facets(self): p = cbft.Params() f = cbft.NumericFacet('numfield') self.assertRaises(ValueError, p.facets.__setitem__, 'facetName', f) self.assertRaises(TypeError, f.add_range, 'range1') p.facets['facetName'] = f.add_range('range1', min=123, max=321) self.assertTrue('facetName' in p.facets) f = cbft.DateFacet('datefield') f.add_range('r1', start='2012', end='2013') f.add_range('r2', start='2014') f.add_range('r3', end='2015') exp = { 'field': 'datefield', 'date_ranges': [{ 'name': 'r1', 'start': '2012', 'end': '2013' }, { 'name': 'r2', 'start': '2014' }, { 'name': 'r3', 'end': '2015' }] } self.assertEqual(exp, f.encodable) f = cbft.TermFacet('termfield') self.assertEqual({'field': 'termfield'}, f.encodable) f.limit = 10 self.assertEqual({'field': 'termfield', 'size': 10}, f.encodable)
def test_params(self): self.assertEqual({}, cbft.Params().as_encodable('ix')) self.assertEqual({'size': 10}, cbft.Params(limit=10).as_encodable('ix')) self.assertEqual({'from': 100}, cbft.Params(skip=100).as_encodable('ix')) self.assertEqual({'explain': True}, cbft.Params(explain=True).as_encodable('ix')) self.assertEqual({'highlight': {'style': 'html'}}, cbft.Params(highlight_style='html').as_encodable('ix')) self.assertEqual({'highlight': {'style': 'ansi', 'fields': ['foo', 'bar', 'baz']}}, cbft.Params(highlight_style='ansi', highlight_fields=['foo', 'bar', 'baz']) .as_encodable('ix')) self.assertEqual({'fields': ['foo', 'bar', 'baz']}, cbft.Params(fields=['foo', 'bar', 'baz'] ).as_encodable('ix')) self.assertEqual({'sort': ['f1', 'f2', '-_score']}, cbft.Params(sort=['f1', 'f2', '-_score'] ).as_encodable('ix')) p = cbft.Params(facets={ 'term': cbft.TermFacet('somefield', limit=10), 'dr': cbft.DateFacet('datefield').add_range('name', 'start', 'end'), 'nr': cbft.NumericFacet('numfield').add_range('name2', 0.0, 99.99) }) exp = { 'facets': { 'term': { 'field': 'somefield', 'size': 10 }, 'dr': { 'field': 'datefield', 'date_ranges': [{ 'name': 'name', 'start': 'start', 'end': 'end' }] }, 'nr': { 'field': 'numfield', 'numeric_ranges': [{ 'name': 'name2', 'min': 0.0, 'max': 99.99 }] }, } } self.assertEqual(exp, p.as_encodable('ix'))
#!/usr/bin/env python from __future__ import print_function from pprint import pprint from couchbase.bucket import Bucket import couchbase.fulltext as FT cb = Bucket() results = cb.search('travel-search', FT.MatchQuery('part', fuzziness=0, field='content'), limit=3, facets={'countries': FT.TermFacet('country', limit=3)}) for row in results: pprint(row) print('Facet results:')