コード例 #1
0
    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)
コード例 #2
0
    def test_cluster_search_date_facets(self  # type: SearchTest
                            ):
        if self.is_mock:
            raise SkipTest("F.T.S. not supported by mock")

        facet_name = 'updated'
        facet = search.DateFacet('updated')
        facet.add_range('early', end='2010-12-01T00:00:00Z')
        facet.add_range('mid', start='2010-12-01T00:00:00Z', end='2011-01-01T00:00:00Z')
        facet.add_range('late', start='2011-01-01T00:00:00Z')
        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.date_ranges))

        # try again but verify the limit is applied (i.e. limit < len(date_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.assertEqual(facet.limit, len(result_facet.date_ranges))

        self.assertRaises(couchbase.exceptions.SearchException, self.cluster.search_query,
                          "beer-search-index",
                          search.TermQuery("north"),
                          facets={'abv': search.DateFacet('abv', 10)})
コード例 #3
0
    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'))