def test_facets(self): s = SearchOptions() f = search.NumericFacet('numfield') p = s._gen_params() 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 = search.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 = search.TermFacet('termfield') self.assertEqual({'field': 'termfield'}, f.encodable) f.limit = 10 self.assertEqual({'field': 'termfield', 'size': 10}, f.encodable)
def test_cluster_search_numeric_facets(self # type: SearchTest ): if self.is_mock: raise SkipTest("F.T.S. not supported by mock") facet_name = 'abv' facet = search.NumericFacet('abv') facet.add_range('low', max=7) facet.add_range('med', min=7, max=10) facet.add_range('high', min=10) x = self.try_n_times_decorator(self.cluster.search_query, 10, 10)("beer-search-index", search.TermQuery("north"), search.SearchOptions(facets={ facet_name:facet })) # type: SearchResult x.rows() result_facet = x.facets()[facet_name] self.assertIsInstance(result_facet, search.SearchFacetResult) self.assertEqual(facet_name, result_facet.name) self.assertEqual(facet.field, result_facet.field) # if a limit is not provided, only the top-level facet results are provided self.assertEqual(0, len(result_facet.numeric_ranges)) # try again but verify the limit is applied (i.e. limit < len(numeric_ranges)) facet.limit = 2 x = self.try_n_times_decorator(self.cluster.search_query, 10, 10)("beer-search-index", search.TermQuery("north"), search.SearchOptions(facets={ facet_name:facet })) # type: SearchResult x.rows() result_facet = x.facets()[facet_name] self.assertIsInstance(result_facet, search.SearchFacetResult) self.assertEqual(facet_name, result_facet.name) self.assertEqual(facet.field, result_facet.field) self.assertGreaterEqual(facet.limit, len(result_facet.numeric_ranges)) self.assertEqual(facet.limit, len(result_facet.numeric_ranges)) self.assertRaises(couchbase.exceptions.SearchException, self.cluster.search_query, "beer-search-index", search.TermQuery("north"), facets={'abv': search.NumericFacet('abv', 10)})
def test_params(self): self.assertEqual({}, SearchOptions().as_encodable('ix')) self.assertEqual({'size': 10}, SearchOptions(limit=10).as_encodable('ix')) self.assertEqual({'from': 100}, SearchOptions(skip=100).as_encodable('ix')) self.assertEqual({'explain': True}, SearchOptions(explain=True).as_encodable('ix')) self.assertEqual( {'highlight': { 'style': 'html' }}, SearchOptions( highlight_style=search.HighlightStyle.Html).as_encodable('ix')) self.assertEqual( {'highlight': { 'style': 'ansi', 'fields': ['foo', 'bar', 'baz'] }}, SearchOptions(highlight_style=search.HighlightStyle.Ansi, highlight_fields=['foo', 'bar', 'baz']).as_encodable('ix')) self.assertEqual( {'fields': ['foo', 'bar', 'baz']}, SearchOptions(fields=['foo', 'bar', 'baz']).as_encodable('ix')) self.assertEqual( {'sort': ['f1', 'f2', '-_score']}, SearchOptions(sort=['f1', 'f2', '-_score']).as_encodable('ix')) self.assertEqual( {'sort': ['f1', 'f2', '-_score']}, SearchOptions(sort=['f1', 'f2', '-_score']).as_encodable('ix')) p = SearchOptions( facets={ 'term': search.TermFacet('somefield', limit=10), 'dr': search.DateFacet('datefield').add_range( 'name', 'start', 'end'), 'nr': search.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'))