Example #1
0
    def test_query(self):
        q = SolrSearcher().search().dismax()
        raw_query = str(q)

        self.assertTrue('q=%s' % quote_plus('*:*') in raw_query)
        self.assertFalse('defType=dismax' in raw_query)

        q = SolrSearcher().search('test query').dismax()
        raw_query = str(q)

        self.assertTrue('q=%s' % quote_plus('test query') in raw_query)
        self.assertTrue('defType=dismax' in raw_query)
        
        q = (
            SolrSearcher().search(X(name='test') | X(name__startswith='test'))
            .dismax()
            .qf([('name', 10), ('keywords', 2)])
            .bf((func.linear('rank',1,0) ^ 100) + func.recip(func.ms('NOW/HOUR', 'dt_created'), 3.16e-11, 1, 1))
            .field_weight('name', 5)
        )
        raw_query = str(q)
        
        self.assertTrue('q=%s' % quote_plus('(name:test OR name:test*)') in raw_query)
        self.assertTrue('qf=%s' % quote_plus('name^5 keywords^2') in raw_query)
        self.assertTrue('bf=%s' % quote_plus('linear(rank,1,0)^100 recip(ms(NOW/HOUR,dt_created),3.16e-11,1,1)') in raw_query)
Example #2
0
    def test_func(self):
        f = func.recip(func.sum('rank', 10), 1, 1, 0)
        self.assertEqual(str(f), 'recip(sum(rank,10),1,1,0)')

        f = func.linear('rank',
                        func.sqrt(func.sum(func.pow('x'), func.pow('y'))), 10)
        self.assertEqual(str(f), 'linear(rank,sqrt(sum(pow(x),pow(y))),10)')

        f = func.if_(func.exists('name'), 100, 0)
        self.assertEqual(str(f), 'if(exists(name),100,0)')

        f = func.termfreq('name', "test term '111'")
        self.assertEqual(str(f), "termfreq(name,'test term \\'111\\'')")

        f = func.undefined('name', 'null')
        self.assertEqual(str(f), 'undefined(name,null)')

        f = func.exists('name', 5,
                        0) * 2 + func.ord('popularity') * 0.5 + func.recip(
                            func.rord('price'), 1, 1000, 1000) * 0.3
        self.assertEqual(
            str(f),
            'exists(name,5,0)^2 ord(popularity)^0.5 recip(rord(price),1,1000,1000)^0.3'
        )

        f = func.min(func.geodist('store', 37.7, -122.4),
                     func.geodist('store', 39.7, -105))
        self.assertEqual(
            str(f), 'min(geodist(store,37.7,-122.4),geodist(store,39.7,-105))')

        self.assertRaises(TypeError, lambda: func.min('a', 'b') * '10')
        self.assertRaises(TypeError, lambda: func.min('a', 'b') + '10')
        self.assertRaises(
            TypeError, lambda: func.min('a', 'b') + func.max('a', 'b') + '10')
Example #3
0
    def test_func(self):
        f = func.recip(func.sum('rank',10), 1, 1, 0)
        self.assertEqual(str(f), 'recip(sum(rank,10),1,1,0)')

        f = func.linear('rank', func.sqrt(func.sum(func.pow('x'), func.pow('y'))), 10)
        self.assertEqual(str(f), 'linear(rank,sqrt(sum(pow(x),pow(y))),10)')

        f = func.if_(func.exists('name'), 100, 0)
        self.assertEqual(str(f), 'if(exists(name),100,0)')

        f = func.termfreq('name', "test term '111'")
        self.assertEqual(str(f), "termfreq(name,'test term \\'111\\'')")

        f = func.undefined('name', 'null')
        self.assertEqual(str(f), 'undefined(name,null)')

        f = func.exists('name', 5, 0) * 2 + func.ord('popularity') * 0.5 + func.recip(func.rord('price'), 1, 1000, 1000) * 0.3
        self.assertEqual(str(f), 'exists(name,5,0)^2 ord(popularity)^0.5 recip(rord(price),1,1000,1000)^0.3')

        f = func.min(func.geodist('store', 37.7, -122.4), func.geodist('store', 39.7, -105))
        self.assertEqual(str(f), 'min(geodist(store,37.7,-122.4),geodist(store,39.7,-105))')

        self.assertRaises(TypeError, lambda: func.min('a', 'b') * '10')
        self.assertRaises(TypeError, lambda: func.min('a', 'b') + '10')
        self.assertRaises(TypeError, lambda: func.min('a', 'b') + func.max('a', 'b') + '10')
Example #4
0
    def test_query(self):
        q = SolrSearcher().search().dismax()
        raw_query = str(q)

        self.assertTrue('q=%s' % quote_plus('*:*') in raw_query)
        self.assertFalse('defType=dismax' in raw_query)

        q = SolrSearcher().search('test query').dismax()
        raw_query = str(q)

        self.assertTrue('q=%s' % quote_plus('test query') in raw_query)
        self.assertTrue('defType=dismax' in raw_query)

        q = (SolrSearcher().search(
            X(name='test') | X(name__startswith='test')).dismax().qf([
                ('name', 10), ('keywords', 2)
            ]).bf((func.linear('rank', 1, 0) ^ 100) +
                  func.recip(func.ms('NOW/HOUR', 'dt_created'), 3.16e-11, 1, 1)
                  ).field_weight('name', 5))
        raw_query = str(q)

        self.assertTrue('q=%s' %
                        quote_plus('(name:test OR name:test*)') in raw_query)
        self.assertTrue('qf=%s' % quote_plus('name^5 keywords^2') in raw_query)
        self.assertTrue('bf=%s' % quote_plus(
            'linear(rank,1,0)^100 recip(ms(NOW/HOUR,dt_created),3.16e-11,1,1)')
                        in raw_query)
Example #5
0
    def test_func(self):
        f = func.linear('rank', func.sqrt(func.sum(func.pow('x'), func.pow('y'))), 10)
        self.assertEqual(str(f), 'linear(rank,sqrt(sum(pow(x),pow(y))),10)')

        f = func.if_(func.exists('name'), 100, 0)
        self.assertEqual(str(f), 'if(exists(name),100,0)')

        f = (func.exists('name', 5, 0) ^ 2) + (func.ord('popularity') ^ 0.5) + (func.recip(func.rord('price'), 1, 1000, 1000) ^ 0.3)
        self.assertEqual(str(f), 'exists(name,5,0)^2 ord(popularity)^0.5 recip(rord(price),1,1000,1000)^0.3')
Example #6
0
    def test_func(self):
        f = func.linear('rank',
                        func.sqrt(func.sum(func.pow('x'), func.pow('y'))), 10)
        self.assertEqual(str(f), 'linear(rank,sqrt(sum(pow(x),pow(y))),10)')

        f = func.if_(func.exists('name'), 100, 0)
        self.assertEqual(str(f), 'if(exists(name),100,0)')

        f = (func.exists('name', 5, 0)
             ^ 2) + (func.ord('popularity') ^ 0.5) + (
                 func.recip(func.rord('price'), 1, 1000, 1000) ^ 0.3)
        self.assertEqual(
            str(f),
            'exists(name,5,0)^2 ord(popularity)^0.5 recip(rord(price),1,1000,1000)^0.3'
        )
Example #7
0
    def test_local_params(self):
        self.assertEqual(force_unicode(LocalParams({'cache': False})),
                         '{!cache=false}')
        self.assertEqual(force_unicode(LocalParams(LocalParams({'cache': False}))),
                         '{!cache=false}')
        self.assertEqual(force_unicode(LocalParams({'ex': 'tag'}, key='tag')),
                         '{!ex=tag key=tag}')
        self.assertEqual(force_unicode(LocalParams({'ex': 'tag', 'key': 'tag'}, key='category')),
                         '{!ex=tag key=category}')
        self.assertEqual(force_unicode(LocalParams(ex=['f1', 'f2'])),
                         '{!ex=f1,f2}')
        self.assertEqual(force_unicode(LocalParams('frange', l=0, u=5)),
                         '{!frange l=0 u=5}')
        self.assertEqual(force_unicode(LocalParams(['geofilt', ('d', 10), ('key', 'd10')])),
                         '{!geofilt d=10 key=d10}')
        self.assertEqual(force_unicode(LocalParams({'type': 'join', 'from': 'id', 'to': 'manu_id'})),
                         '{!join from=id to=manu_id}')
        self.assertEqual(force_unicode(LocalParams()), '')
        self.assertEqual(force_unicode(LocalParams(None)), '')

        self.assertEqual(force_unicode(LocalParams('dismax', v='OR test')),
                         """{!dismax v='or test'}""")
        self.assertEqual(force_unicode(LocalParams('dismax', v='"test"')),
                         """{!dismax v='\\"test\\"'}""")
        self.assertEqual(force_unicode(LocalParams('dismax', v='test\'')),
                         """{!dismax v='test\\\\\''}""")
        self.assertRaises(ValueError, LocalParams, '{dismax}', v='test')
        self.assertRaises(ValueError, LocalParams, ['dismax', ('!v', 'test')])
        
        self.assertEqual(
            force_unicode(LocalParams('dismax', qf='name',
                            v=X(SafeUnicode('"nokia lumia"')) | X(SafeUnicode('"nokia n900"')))),
            """{!dismax qf=name v='(\\"nokia lumia\\" OR \\"nokia n900\\")'}""")

        lp = LocalParams('dismax', bf=func.linear('rank', 100, 0), v='$q1')
        lp.update(LocalParams(qf='name^10 description'))
        lp.add('pf', 'name')
        lp.add('ps', 2)
        self.assertIn('type', lp)
        self.assertIn('v', lp)
        self.assertFalse('q' in lp)
        self.assertEqual(lp['type'], 'dismax')
        self.assertEqual(
            force_unicode(lp),
            "{!dismax bf='linear(rank,100,0)' v=$q1 qf='name^10 description' pf=name ps=2}")
Example #8
0
    def test_local_params(self):
        self.assertEqual(force_unicode(LocalParams({'cache': False})),
                         '{!cache=false}')
        self.assertEqual(
            force_unicode(LocalParams(LocalParams({'cache': False}))),
            '{!cache=false}')
        self.assertEqual(force_unicode(LocalParams({'ex': 'tag'}, key='tag')),
                         '{!ex=tag key=tag}')
        self.assertEqual(
            force_unicode(
                LocalParams({
                    'ex': 'tag',
                    'key': 'tag'
                }, key='category')), '{!ex=tag key=category}')
        self.assertEqual(force_unicode(LocalParams(ex=['f1', 'f2'])),
                         '{!ex=f1,f2}')
        self.assertEqual(force_unicode(LocalParams('frange', l=0, u=5)),
                         '{!frange l=0 u=5}')
        self.assertEqual(
            force_unicode(LocalParams(['geofilt', ('d', 10), ('key', 'd10')])),
            '{!geofilt d=10 key=d10}')
        self.assertEqual(
            force_unicode(
                LocalParams({
                    'type': 'join',
                    'from': 'id',
                    'to': 'manu_id'
                })), '{!join from=id to=manu_id}')
        self.assertEqual(force_unicode(LocalParams()), '')
        self.assertEqual(force_unicode(LocalParams(None)), '')

        self.assertEqual(force_unicode(LocalParams('dismax', v='OR test')),
                         """{!dismax v='or test'}""")
        self.assertEqual(force_unicode(LocalParams('dismax', v='"test"')),
                         """{!dismax v='\\"test\\"'}""")
        self.assertEqual(force_unicode(LocalParams('dismax', v='test\'')),
                         """{!dismax v='test\\\\\''}""")
        self.assertRaises(ValueError, LocalParams, '{dismax}', v='test')
        self.assertRaises(ValueError, LocalParams, ['dismax', ('!v', 'test')])

        self.assertEqual(
            force_unicode(
                LocalParams('dismax',
                            qf='name',
                            v=X(SafeUnicode('"nokia lumia"'))
                            | X(SafeUnicode('"nokia n900"')))),
            """{!dismax qf=name v='(\\"nokia lumia\\" OR \\"nokia n900\\")'}"""
        )

        lp = LocalParams('dismax', bf=func.linear('rank', 100, 0), v='$q1')
        lp.update(LocalParams(qf='name^10 description'))
        lp.add('pf', 'name')
        lp.add('ps', 2)
        self.assertIn('type', lp)
        self.assertIn('v', lp)
        self.assertFalse('q' in lp)
        self.assertEqual(lp['type'], 'dismax')
        self.assertEqual(
            force_unicode(lp),
            "{!dismax bf='linear(rank,100,0)' v=$q1 qf='name^10 description' pf=name ps=2}"
        )