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)
Beispiel #3
0
    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'))
Beispiel #4
0
#!/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:')