def test_all_cases(self): self.sample_objs = [] for i in xrange(1, 4): mock = MockModel() mock.id = i mock.author = 'daniel%s' % i mock.pub_date = datetime.date(2009, 2, 25) - datetime.timedelta(days=i) self.sample_objs.append(mock) # Stow. # Point the backend at a URL that doesn't exist so we can watch the # sparks fly. old_solr_url = settings.HAYSTACK_SOLR_URL settings.HAYSTACK_SOLR_URL = "%s/foo/" % settings.HAYSTACK_SOLR_URL cap = CaptureHandler() logging.getLogger('haystack').addHandler(cap) import haystack logging.getLogger('haystack').removeHandler(haystack.stream) # Setup the rest of the bits. site = SearchSite() site.register(MockModel, SolrMockSearchIndex) sb = SearchBackend(site=site) smmi = SolrMockSearchIndex(MockModel, backend=sb) # Prior to the addition of the try/except bits, these would all fail miserably. self.assertEqual(len(CaptureHandler.logs_seen), 0) sb.update(smmi, self.sample_objs) self.assertEqual(len(CaptureHandler.logs_seen), 1) sb.remove(self.sample_objs[0]) self.assertEqual(len(CaptureHandler.logs_seen), 2) sb.search('search') self.assertEqual(len(CaptureHandler.logs_seen), 3) sb.more_like_this(self.sample_objs[0]) self.assertEqual(len(CaptureHandler.logs_seen), 4) sb.clear([MockModel]) self.assertEqual(len(CaptureHandler.logs_seen), 5) sb.clear() self.assertEqual(len(CaptureHandler.logs_seen), 6) # Restore. settings.HAYSTACK_SOLR_URL = old_solr_url logging.getLogger('haystack').removeHandler(cap) logging.getLogger('haystack').addHandler(haystack.stream)
def test_all_cases(self): self.sample_objs = [] for i in xrange(1, 4): mock = MockModel() mock.id = i mock.author = "daniel%s" % i mock.pub_date = datetime.date(2009, 2, 25) - datetime.timedelta(days=i) self.sample_objs.append(mock) # Stow. # Point the backend at a URL that doesn't exist so we can watch the # sparks fly. old_solr_url = settings.HAYSTACK_SOLR_URL settings.HAYSTACK_SOLR_URL = "%s/foo/" % settings.HAYSTACK_SOLR_URL cap = CaptureHandler() logging.getLogger("haystack").addHandler(cap) import haystack logging.getLogger("haystack").removeHandler(haystack.stream) # Setup the rest of the bits. site = SearchSite() site.register(MockModel, SolrMockSearchIndex) sb = SearchBackend(site=site) smmi = SolrMockSearchIndex(MockModel, backend=sb) # Prior to the addition of the try/except bits, these would all fail miserably. self.assertEqual(len(CaptureHandler.logs_seen), 0) sb.update(smmi, self.sample_objs) self.assertEqual(len(CaptureHandler.logs_seen), 1) sb.remove(self.sample_objs[0]) self.assertEqual(len(CaptureHandler.logs_seen), 2) sb.search("search") self.assertEqual(len(CaptureHandler.logs_seen), 3) sb.more_like_this(self.sample_objs[0]) self.assertEqual(len(CaptureHandler.logs_seen), 4) sb.clear([MockModel]) self.assertEqual(len(CaptureHandler.logs_seen), 5) sb.clear() self.assertEqual(len(CaptureHandler.logs_seen), 6) # Restore. settings.HAYSTACK_SOLR_URL = old_solr_url logging.getLogger("haystack").removeHandler(cap) logging.getLogger("haystack").addHandler(haystack.stream)
class SolrSearchBackendTestCase(TestCase): def setUp(self): super(SolrSearchBackendTestCase, self).setUp() # Stow. self.old_solr_url = getattr(settings, "HAYSTACK_SOLR_URL", "http://localhost:9001/solr/test_default") settings.HAYSTACK_SOLR_URL = "http://localhost:9001/solr/test_default" self.raw_solr = pysolr.Solr(settings.HAYSTACK_SOLR_URL) self.raw_solr.delete(q="*:*") self.site = SearchSite() self.sb = SearchBackend(site=self.site) self.smmi = SolrMockSearchIndex(MockModel, backend=self.sb) self.smtmmi = SolrMaintainTypeMockSearchIndex(MockModel, backend=self.sb) self.site.register(MockModel, SolrMockSearchIndex) # Stow. import haystack self.old_site = haystack.site haystack.site = self.site self.sample_objs = [] for i in xrange(1, 4): mock = MockModel() mock.id = i mock.author = "daniel%s" % i mock.pub_date = datetime.date(2009, 2, 25) - datetime.timedelta(days=i) self.sample_objs.append(mock) def tearDown(self): import haystack haystack.site = self.old_site settings.HAYSTACK_SOLR_URL = self.old_solr_url super(SolrSearchBackendTestCase, self).tearDown() def test_update(self): self.sb.update(self.smmi, self.sample_objs) # Check what Solr thinks is there. self.assertEqual(self.raw_solr.search("*:*").hits, 3) self.assertEqual( self.raw_solr.search("*:*").docs, [ { "django_id": "1", "django_ct": "core.mockmodel", "name": "daniel1", "text": "Indexed!\n1", "pub_date": "2009-02-24T00:00:00Z", "id": "core.mockmodel.1", }, { "django_id": "2", "django_ct": "core.mockmodel", "name": "daniel2", "text": "Indexed!\n2", "pub_date": "2009-02-23T00:00:00Z", "id": "core.mockmodel.2", }, { "django_id": "3", "django_ct": "core.mockmodel", "name": "daniel3", "text": "Indexed!\n3", "pub_date": "2009-02-22T00:00:00Z", "id": "core.mockmodel.3", }, ], ) def test_remove(self): self.sb.update(self.smmi, self.sample_objs) self.assertEqual(self.raw_solr.search("*:*").hits, 3) self.sb.remove(self.sample_objs[0]) self.assertEqual(self.raw_solr.search("*:*").hits, 2) self.assertEqual( self.raw_solr.search("*:*").docs, [ { "django_id": "2", "django_ct": "core.mockmodel", "name": "daniel2", "text": "Indexed!\n2", "pub_date": "2009-02-23T00:00:00Z", "id": "core.mockmodel.2", }, { "django_id": "3", "django_ct": "core.mockmodel", "name": "daniel3", "text": "Indexed!\n3", "pub_date": "2009-02-22T00:00:00Z", "id": "core.mockmodel.3", }, ], ) def test_clear(self): self.sb.update(self.smmi, self.sample_objs) self.assertEqual(self.raw_solr.search("*:*").hits, 3) self.sb.clear() self.assertEqual(self.raw_solr.search("*:*").hits, 0) self.sb.update(self.smmi, self.sample_objs) self.assertEqual(self.raw_solr.search("*:*").hits, 3) self.sb.clear([AnotherMockModel]) self.assertEqual(self.raw_solr.search("*:*").hits, 3) self.sb.clear([MockModel]) self.assertEqual(self.raw_solr.search("*:*").hits, 0) self.sb.update(self.smmi, self.sample_objs) self.assertEqual(self.raw_solr.search("*:*").hits, 3) self.sb.clear([AnotherMockModel, MockModel]) self.assertEqual(self.raw_solr.search("*:*").hits, 0) def test_search(self): self.sb.update(self.smmi, self.sample_objs) self.assertEqual(self.raw_solr.search("*:*").hits, 3) self.assertEqual(self.sb.search(""), {"hits": 0, "results": []}) self.assertEqual(self.sb.search("*:*")["hits"], 3) self.assertEqual([result.pk for result in self.sb.search("*:*")["results"]], ["1", "2", "3"]) self.assertEqual(self.sb.search("", highlight=True), {"hits": 0, "results": []}) self.assertEqual(self.sb.search("Index", highlight=True)["hits"], 3) self.assertEqual( [result.highlighted["text"][0] for result in self.sb.search("Index", highlight=True)["results"]], ["<em>Indexed</em>!\n1", "<em>Indexed</em>!\n2", "<em>Indexed</em>!\n3"], ) self.assertEqual(self.sb.search("Indx")["hits"], 0) self.assertEqual(self.sb.search("Indx")["spelling_suggestion"], "index") self.assertEqual(self.sb.search("Indx", spelling_query="indexy")["spelling_suggestion"], "index") self.assertEqual(self.sb.search("", facets=["name"]), {"hits": 0, "results": []}) results = self.sb.search("Index", facets=["name"]) self.assertEqual(results["hits"], 3) self.assertEqual(results["facets"]["fields"]["name"], [("daniel1", 1), ("daniel2", 1), ("daniel3", 1)]) self.assertEqual( self.sb.search( "", date_facets={ "pub_date": { "start_date": datetime.date(2008, 2, 26), "end_date": datetime.date(2008, 3, 26), "gap_by": "month", "gap_amount": 1, } }, ), {"hits": 0, "results": []}, ) results = self.sb.search( "Index", date_facets={ "pub_date": { "start_date": datetime.date(2008, 2, 26), "end_date": datetime.date(2008, 3, 26), "gap_by": "month", "gap_amount": 1, } }, ) self.assertEqual(results["hits"], 3) # DRL_TODO: Correct output but no counts. Another case of needing better test data? # self.assertEqual(results['facets']['dates']['pub_date'], {'end': '2008-02-26T00:00:00Z', 'gap': '/MONTH'}) self.assertEqual(self.sb.search("", query_facets={"name": "[* TO e]"}), {"hits": 0, "results": []}) results = self.sb.search("Index", query_facets={"name": "[* TO e]"}) self.assertEqual(results["hits"], 3) self.assertEqual(results["facets"]["queries"], {"name:[* TO e]": 3}) self.assertEqual(self.sb.search("", narrow_queries=set(["name:daniel1"])), {"hits": 0, "results": []}) results = self.sb.search("Index", narrow_queries=set(["name:daniel1"])) self.assertEqual(results["hits"], 1) def test_more_like_this(self): self.sb.update(self.smmi, self.sample_objs) self.assertEqual(self.raw_solr.search("*:*").hits, 3) # A functional MLT example with enough data to work is below. Rely on # this to ensure the API is correct enough. self.assertEqual(self.sb.more_like_this(self.sample_objs[0])["hits"], 0) self.assertEqual([result.pk for result in self.sb.more_like_this(self.sample_objs[0])["results"]], []) def test_build_schema(self): (content_field_name, fields) = self.sb.build_schema(self.site.all_searchfields()) self.assertEqual(content_field_name, "text") self.assertEqual(len(fields), 3) self.assertEqual( fields, [ {"indexed": "true", "type": "text", "field_name": "text", "multi_valued": "false"}, {"indexed": "true", "type": "date", "field_name": "pub_date", "multi_valued": "false"}, {"indexed": "true", "type": "text", "field_name": "name", "multi_valued": "false"}, ], ) def test_verify_type(self): import haystack haystack.site.unregister(MockModel) haystack.site.register(MockModel, SolrMaintainTypeMockSearchIndex) self.sb.update(self.smtmmi, self.sample_objs) self.assertEqual(self.sb.search("*:*")["hits"], 3) self.assertEqual([result.month for result in self.sb.search("*:*")["results"]], [u"02", u"02", u"02"])
class SolrSearchBackendTestCase(TestCase): def setUp(self): super(SolrSearchBackendTestCase, self).setUp() # Wipe it clean. self.raw_solr = pysolr.Solr(settings.HAYSTACK_SOLR_URL) clear_solr_index() self.site = SearchSite() self.sb = SearchBackend(site=self.site) self.smmi = SolrMockSearchIndex(MockModel, backend=self.sb) self.smtmmi = SolrMaintainTypeMockSearchIndex(MockModel, backend=self.sb) self.site.register(MockModel, SolrMockSearchIndex) # Stow. import haystack self.old_site = haystack.site haystack.site = self.site self.sample_objs = [] for i in xrange(1, 4): mock = MockModel() mock.id = i mock.author = 'daniel%s' % i mock.pub_date = datetime.date(2009, 2, 25) - datetime.timedelta(days=i) self.sample_objs.append(mock) def tearDown(self): import haystack haystack.site = self.old_site super(SolrSearchBackendTestCase, self).tearDown() def test_update(self): self.sb.update(self.smmi, self.sample_objs) # Check what Solr thinks is there. self.assertEqual(self.raw_solr.search('*:*').hits, 3) self.assertEqual(self.raw_solr.search('*:*').docs, [ { 'django_id': '1', 'django_ct': 'core.mockmodel', 'name': 'daniel1', 'name_exact': 'daniel1', 'text': 'Indexed!\n1', 'pub_date': '2009-02-24T00:00:00Z', 'id': 'core.mockmodel.1' }, { 'django_id': '2', 'django_ct': 'core.mockmodel', 'name': 'daniel2', 'name_exact': 'daniel2', 'text': 'Indexed!\n2', 'pub_date': '2009-02-23T00:00:00Z', 'id': 'core.mockmodel.2' }, { 'django_id': '3', 'django_ct': 'core.mockmodel', 'name': 'daniel3', 'name_exact': 'daniel3', 'text': 'Indexed!\n3', 'pub_date': '2009-02-22T00:00:00Z', 'id': 'core.mockmodel.3' } ]) def test_remove(self): self.sb.update(self.smmi, self.sample_objs) self.assertEqual(self.raw_solr.search('*:*').hits, 3) self.sb.remove(self.sample_objs[0]) self.assertEqual(self.raw_solr.search('*:*').hits, 2) self.assertEqual(self.raw_solr.search('*:*').docs, [ { 'django_id': '2', 'django_ct': 'core.mockmodel', 'name': 'daniel2', 'name_exact': 'daniel2', 'text': 'Indexed!\n2', 'pub_date': '2009-02-23T00:00:00Z', 'id': 'core.mockmodel.2' }, { 'django_id': '3', 'django_ct': 'core.mockmodel', 'name': 'daniel3', 'name_exact': 'daniel3', 'text': 'Indexed!\n3', 'pub_date': '2009-02-22T00:00:00Z', 'id': 'core.mockmodel.3' } ]) def test_clear(self): self.sb.update(self.smmi, self.sample_objs) self.assertEqual(self.raw_solr.search('*:*').hits, 3) self.sb.clear() self.assertEqual(self.raw_solr.search('*:*').hits, 0) self.sb.update(self.smmi, self.sample_objs) self.assertEqual(self.raw_solr.search('*:*').hits, 3) self.sb.clear([AnotherMockModel]) self.assertEqual(self.raw_solr.search('*:*').hits, 3) self.sb.clear([MockModel]) self.assertEqual(self.raw_solr.search('*:*').hits, 0) self.sb.update(self.smmi, self.sample_objs) self.assertEqual(self.raw_solr.search('*:*').hits, 3) self.sb.clear([AnotherMockModel, MockModel]) self.assertEqual(self.raw_solr.search('*:*').hits, 0) def test_search(self): self.sb.update(self.smmi, self.sample_objs) self.assertEqual(self.raw_solr.search('*:*').hits, 3) self.assertEqual(self.sb.search(''), {'hits': 0, 'results': []}) self.assertEqual(self.sb.search('*:*')['hits'], 3) self.assertEqual([result.pk for result in self.sb.search('*:*')['results']], ['1', '2', '3']) self.assertEqual(self.sb.search('', highlight=True), {'hits': 0, 'results': []}) self.assertEqual(self.sb.search('Index', highlight=True)['hits'], 3) self.assertEqual([result.highlighted['text'][0] for result in self.sb.search('Index', highlight=True)['results']], ['<em>Indexed</em>!\n1', '<em>Indexed</em>!\n2', '<em>Indexed</em>!\n3']) self.assertEqual(self.sb.search('Indx')['hits'], 0) self.assertEqual(self.sb.search('Indx')['spelling_suggestion'], 'index') self.assertEqual(self.sb.search('Indx', spelling_query='indexy')['spelling_suggestion'], 'index') self.assertEqual(self.sb.search('', facets=['name']), {'hits': 0, 'results': []}) results = self.sb.search('Index', facets=['name']) self.assertEqual(results['hits'], 3) self.assertEqual(results['facets']['fields']['name'], [('daniel1', 1), ('daniel2', 1), ('daniel3', 1)]) self.assertEqual(self.sb.search('', date_facets={'pub_date': {'start_date': datetime.date(2008, 2, 26), 'end_date': datetime.date(2008, 3, 26), 'gap_by': 'month', 'gap_amount': 1}}), {'hits': 0, 'results': []}) results = self.sb.search('Index', date_facets={'pub_date': {'start_date': datetime.date(2008, 2, 26), 'end_date': datetime.date(2008, 3, 26), 'gap_by': 'month', 'gap_amount': 1}}) self.assertEqual(results['hits'], 3) # DRL_TODO: Correct output but no counts. Another case of needing better test data? # self.assertEqual(results['facets']['dates']['pub_date'], {'end': '2008-02-26T00:00:00Z', 'gap': '/MONTH'}) self.assertEqual(self.sb.search('', query_facets=[('name', '[* TO e]')]), {'hits': 0, 'results': []}) results = self.sb.search('Index', query_facets=[('name', '[* TO e]')]) self.assertEqual(results['hits'], 3) self.assertEqual(results['facets']['queries'], {'name:[* TO e]': 3}) self.assertEqual(self.sb.search('', narrow_queries=set(['name:daniel1'])), {'hits': 0, 'results': []}) results = self.sb.search('Index', narrow_queries=set(['name:daniel1'])) self.assertEqual(results['hits'], 1) # Check the use of ``limit_to_registered_models``. self.assertEqual(self.sb.search('', limit_to_registered_models=False), {'hits': 0, 'results': []}) self.assertEqual(self.sb.search('*:*', limit_to_registered_models=False)['hits'], 3) self.assertEqual([result.pk for result in self.sb.search('*:*', limit_to_registered_models=False)['results']], ['1', '2', '3']) # Stow. old_limit_to_registered_models = getattr(settings, 'HAYSTACK_LIMIT_TO_REGISTERED_MODELS', True) settings.HAYSTACK_LIMIT_TO_REGISTERED_MODELS = False self.assertEqual(self.sb.search(''), {'hits': 0, 'results': []}) self.assertEqual(self.sb.search('*:*')['hits'], 3) self.assertEqual([result.pk for result in self.sb.search('*:*')['results']], ['1', '2', '3']) # Restore. settings.HAYSTACK_LIMIT_TO_REGISTERED_MODELS = old_limit_to_registered_models def test_more_like_this(self): self.sb.update(self.smmi, self.sample_objs) self.assertEqual(self.raw_solr.search('*:*').hits, 3) # A functional MLT example with enough data to work is below. Rely on # this to ensure the API is correct enough. self.assertEqual(self.sb.more_like_this(self.sample_objs[0])['hits'], 0) self.assertEqual([result.pk for result in self.sb.more_like_this(self.sample_objs[0])['results']], []) def test_build_schema(self): (content_field_name, fields) = self.sb.build_schema(self.site.all_searchfields()) self.assertEqual(content_field_name, 'text') self.assertEqual(len(fields), 4) self.assertEqual(fields, [ { 'indexed': 'true', 'type': 'text', 'stored': 'true', 'field_name': 'text', 'multi_valued': 'false' }, { 'indexed': 'true', 'type': 'date', 'stored': 'true', 'field_name': 'pub_date', 'multi_valued': 'false' }, { 'indexed': 'true', 'type': 'text', 'stored': 'true', 'field_name': 'name', 'multi_valued': 'false' }, { 'indexed': 'true', 'field_name': 'name_exact', 'stored': 'true', 'type': 'string', 'multi_valued': 'false' } ]) self.site.unregister(MockModel) self.site.register(MockModel, SolrComplexFacetsMockSearchIndex) (content_field_name, fields) = self.sb.build_schema(self.site.all_searchfields()) self.assertEqual(content_field_name, 'text') self.assertEqual(len(fields), 15) self.assertEqual(fields, [ { 'indexed': 'true', 'type': 'text', 'stored': 'true', 'field_name': 'name', 'multi_valued': 'false' }, { 'indexed': 'true', 'type': 'boolean', 'stored': 'true', 'field_name': 'is_active_exact', 'multi_valued': 'false' }, { 'indexed': 'true', 'type': 'date', 'stored': 'true', 'field_name': 'created', 'multi_valued': 'false' }, { 'indexed': 'true', 'type': 'slong', 'stored': 'true', 'field_name': 'post_count', 'multi_valued': 'false' }, { 'indexed': 'true', 'type': 'date', 'stored': 'true', 'field_name': 'created_exact', 'multi_valued': 'false' }, { 'indexed': 'true', 'type': 'string', 'stored': 'true', 'field_name': 'sites_exact', 'multi_valued': 'true' }, { 'indexed': 'true', 'type': 'boolean', 'stored': 'true', 'field_name': 'is_active', 'multi_valued': 'false' }, { 'indexed': 'true', 'type': 'text', 'stored': 'true', 'field_name': 'sites', 'multi_valued': 'true' }, { 'indexed': 'true', 'type': 'slong', 'stored': 'true', 'field_name': 'post_count_i', 'multi_valued': 'false' }, { 'indexed': 'true', 'type': 'sfloat', 'stored': 'true', 'field_name': 'average_rating', 'multi_valued': 'false' }, { 'indexed': 'true', 'type': 'text', 'stored': 'true', 'field_name': 'text', 'multi_valued': 'false' }, { 'indexed': 'true', 'type': 'date', 'stored': 'true', 'field_name': 'pub_date_exact', 'multi_valued': 'false' }, { 'indexed': 'true', 'type': 'string', 'stored': 'true', 'field_name': 'name_exact', 'multi_valued': 'false' }, { 'indexed': 'true', 'type': 'date', 'stored': 'true', 'field_name': 'pub_date', 'multi_valued': 'false' }, { 'indexed': 'true', 'type': 'sfloat', 'stored': 'true', 'field_name': 'average_rating_exact', 'multi_valued': 'false' } ]) def test_verify_type(self): import haystack haystack.site.unregister(MockModel) haystack.site.register(MockModel, SolrMaintainTypeMockSearchIndex) self.sb.update(self.smtmmi, self.sample_objs) self.assertEqual(self.sb.search('*:*')['hits'], 3) self.assertEqual([result.month for result in self.sb.search('*:*')['results']], [u'02', u'02', u'02'])
class SolrSearchBackendTestCase(TestCase): def setUp(self): super(SolrSearchBackendTestCase, self).setUp() # Stow. self.old_solr_url = getattr(settings, 'HAYSTACK_SOLR_URL', 'http://localhost:9001/solr/test_default') settings.HAYSTACK_SOLR_URL = 'http://localhost:9001/solr/test_default' self.raw_solr = pysolr.Solr(settings.HAYSTACK_SOLR_URL) self.raw_solr.delete(q='*:*') self.site = SearchSite() self.sb = SearchBackend(site=self.site) self.smmi = SolrMockSearchIndex(MockModel, backend=self.sb) self.site.register(MockModel, SolrMockSearchIndex) # Stow. import haystack self.old_site = haystack.site haystack.site = self.site self.sample_objs = [] for i in xrange(1, 4): mock = MockModel() mock.id = i mock.author = 'daniel%s' % i mock.pub_date = datetime.date(2009, 2, 25) - datetime.timedelta(days=i) self.sample_objs.append(mock) def tearDown(self): import haystack haystack.site = self.old_site settings.HAYSTACK_SOLR_URL = self.old_solr_url super(SolrSearchBackendTestCase, self).tearDown() def test_update(self): self.sb.update(self.smmi, self.sample_objs) # Check what Solr thinks is there. self.assertEqual(self.raw_solr.search('*:*').hits, 3) self.assertEqual(self.raw_solr.search('*:*').docs, [{'django_id': '1', 'django_ct': 'core.mockmodel', 'name': 'daniel1', 'text': 'Indexed!\n1', 'pub_date': '2009-02-24T00:00:00Z', 'id': 'core.mockmodel.1'}, {'django_id': '2', 'django_ct': 'core.mockmodel', 'name': 'daniel2', 'text': 'Indexed!\n2', 'pub_date': '2009-02-23T00:00:00Z', 'id': 'core.mockmodel.2'}, {'django_id': '3', 'django_ct': 'core.mockmodel', 'name': 'daniel3', 'text': 'Indexed!\n3', 'pub_date': '2009-02-22T00:00:00Z', 'id': 'core.mockmodel.3'}]) def test_remove(self): self.sb.update(self.smmi, self.sample_objs) self.assertEqual(self.raw_solr.search('*:*').hits, 3) self.sb.remove(self.sample_objs[0]) self.assertEqual(self.raw_solr.search('*:*').hits, 2) self.assertEqual(self.raw_solr.search('*:*').docs, [{'django_id': '2', 'django_ct': 'core.mockmodel', 'name': 'daniel2', 'text': 'Indexed!\n2', 'pub_date': '2009-02-23T00:00:00Z', 'id': 'core.mockmodel.2'}, {'django_id': '3', 'django_ct': 'core.mockmodel', 'name': 'daniel3', 'text': 'Indexed!\n3', 'pub_date': '2009-02-22T00:00:00Z', 'id': 'core.mockmodel.3'}]) def test_clear(self): self.sb.update(self.smmi, self.sample_objs) self.assertEqual(self.raw_solr.search('*:*').hits, 3) self.sb.clear() self.assertEqual(self.raw_solr.search('*:*').hits, 0) self.sb.update(self.smmi, self.sample_objs) self.assertEqual(self.raw_solr.search('*:*').hits, 3) self.sb.clear([AnotherMockModel]) self.assertEqual(self.raw_solr.search('*:*').hits, 3) self.sb.clear([MockModel]) self.assertEqual(self.raw_solr.search('*:*').hits, 0) self.sb.update(self.smmi, self.sample_objs) self.assertEqual(self.raw_solr.search('*:*').hits, 3) self.sb.clear([AnotherMockModel, MockModel]) self.assertEqual(self.raw_solr.search('*:*').hits, 0) def test_search(self): self.sb.update(self.smmi, self.sample_objs) self.assertEqual(self.raw_solr.search('*:*').hits, 3) self.assertEqual(self.sb.search(''), []) self.assertEqual(self.sb.search('*:*')['hits'], 3) self.assertEqual([result.pk for result in self.sb.search('*:*')['results']], ['1', '2', '3']) self.assertEqual(self.sb.search('', highlight=True), []) self.assertEqual(self.sb.search('Index', highlight=True)['hits'], 3) self.assertEqual([result.highlighted['text'][0] for result in self.sb.search('Index', highlight=True)['results']], ['<em>Indexed</em>!\n1', '<em>Indexed</em>!\n2', '<em>Indexed</em>!\n3']) self.assertEqual(self.sb.search('Indx')['hits'], 0) self.assertEqual(self.sb.search('Indx')['spelling_suggestion'], 'index') self.assertEqual(self.sb.search('', facets=['name']), []) results = self.sb.search('Index', facets=['name']) self.assertEqual(results['hits'], 3) self.assertEqual(results['facets']['fields']['name'], [('daniel1', 1), ('daniel2', 1), ('daniel3', 1)]) self.assertEqual(self.sb.search('', date_facets={'pub_date': {'start_date': datetime.date(2008, 2, 26), 'end_date': datetime.date(2008, 2, 26), 'gap': '/MONTH'}}), []) results = self.sb.search('Index', date_facets={'pub_date': {'start_date': datetime.date(2008, 2, 26), 'end_date': datetime.date(2008, 2, 26), 'gap': '/MONTH'}}) self.assertEqual(results['hits'], 3) # DRL_TODO: Correct output but no counts. Another case of needing better test data? self.assertEqual(results['facets']['dates']['pub_date'], {'end': '2008-02-26T00:00:00Z', 'gap': '/MONTH'}) self.assertEqual(self.sb.search('', query_facets={'name': '[* TO e]'}), []) results = self.sb.search('Index', query_facets={'name': '[* TO e]'}) self.assertEqual(results['hits'], 3) self.assertEqual(results['facets']['queries'], {'name:[* TO e]': 3}) self.assertEqual(self.sb.search('', narrow_queries=['name:daniel1']), []) results = self.sb.search('Index', narrow_queries=['name:daniel1']) self.assertEqual(results['hits'], 1) def test_more_like_this(self): self.sb.update(self.smmi, self.sample_objs) self.assertEqual(self.raw_solr.search('*:*').hits, 3) # A functional MLT example with enough data to work is below. Rely on # this to ensure the API is correct enough. self.assertEqual(self.sb.more_like_this(self.sample_objs[0])['hits'], 0) self.assertEqual([result.pk for result in self.sb.more_like_this(self.sample_objs[0])['results']], [])
class SolrSearchBackendTestCase(TestCase): def setUp(self): super(SolrSearchBackendTestCase, self).setUp() # Wipe it clean. self.raw_solr = pysolr.Solr(settings.HAYSTACK_SOLR_URL) clear_solr_index() self.site = SearchSite() self.sb = SearchBackend(site=self.site) self.smmi = SolrMockSearchIndex(MockModel, backend=self.sb) self.smtmmi = SolrMaintainTypeMockSearchIndex(MockModel, backend=self.sb) self.site.register(MockModel, SolrMockSearchIndex) # Stow. import haystack self.old_site = haystack.site haystack.site = self.site self.sample_objs = [] for i in xrange(1, 4): mock = MockModel() mock.id = i mock.author = 'daniel%s' % i mock.pub_date = datetime.date(2009, 2, 25) - datetime.timedelta(days=i) self.sample_objs.append(mock) def tearDown(self): import haystack haystack.site = self.old_site super(SolrSearchBackendTestCase, self).tearDown() def test_update(self): self.sb.update(self.smmi, self.sample_objs) # Check what Solr thinks is there. self.assertEqual(self.raw_solr.search('*:*').hits, 3) self.assertEqual( self.raw_solr.search('*:*').docs, [{ 'django_id': '1', 'django_ct': 'core.mockmodel', 'name': 'daniel1', 'name_exact': 'daniel1', 'text': 'Indexed!\n1', 'pub_date': '2009-02-24T00:00:00Z', 'id': 'core.mockmodel.1' }, { 'django_id': '2', 'django_ct': 'core.mockmodel', 'name': 'daniel2', 'name_exact': 'daniel2', 'text': 'Indexed!\n2', 'pub_date': '2009-02-23T00:00:00Z', 'id': 'core.mockmodel.2' }, { 'django_id': '3', 'django_ct': 'core.mockmodel', 'name': 'daniel3', 'name_exact': 'daniel3', 'text': 'Indexed!\n3', 'pub_date': '2009-02-22T00:00:00Z', 'id': 'core.mockmodel.3' }]) def test_remove(self): self.sb.update(self.smmi, self.sample_objs) self.assertEqual(self.raw_solr.search('*:*').hits, 3) self.sb.remove(self.sample_objs[0]) self.assertEqual(self.raw_solr.search('*:*').hits, 2) self.assertEqual( self.raw_solr.search('*:*').docs, [{ 'django_id': '2', 'django_ct': 'core.mockmodel', 'name': 'daniel2', 'name_exact': 'daniel2', 'text': 'Indexed!\n2', 'pub_date': '2009-02-23T00:00:00Z', 'id': 'core.mockmodel.2' }, { 'django_id': '3', 'django_ct': 'core.mockmodel', 'name': 'daniel3', 'name_exact': 'daniel3', 'text': 'Indexed!\n3', 'pub_date': '2009-02-22T00:00:00Z', 'id': 'core.mockmodel.3' }]) def test_clear(self): self.sb.update(self.smmi, self.sample_objs) self.assertEqual(self.raw_solr.search('*:*').hits, 3) self.sb.clear() self.assertEqual(self.raw_solr.search('*:*').hits, 0) self.sb.update(self.smmi, self.sample_objs) self.assertEqual(self.raw_solr.search('*:*').hits, 3) self.sb.clear([AnotherMockModel]) self.assertEqual(self.raw_solr.search('*:*').hits, 3) self.sb.clear([MockModel]) self.assertEqual(self.raw_solr.search('*:*').hits, 0) self.sb.update(self.smmi, self.sample_objs) self.assertEqual(self.raw_solr.search('*:*').hits, 3) self.sb.clear([AnotherMockModel, MockModel]) self.assertEqual(self.raw_solr.search('*:*').hits, 0) def test_search(self): self.sb.update(self.smmi, self.sample_objs) self.assertEqual(self.raw_solr.search('*:*').hits, 3) self.assertEqual(self.sb.search(''), {'hits': 0, 'results': []}) self.assertEqual(self.sb.search('*:*')['hits'], 3) self.assertEqual( [result.pk for result in self.sb.search('*:*')['results']], ['1', '2', '3']) self.assertEqual(self.sb.search('', highlight=True), { 'hits': 0, 'results': [] }) self.assertEqual(self.sb.search('Index', highlight=True)['hits'], 3) self.assertEqual([ result.highlighted['text'][0] for result in self.sb.search('Index', highlight=True)['results'] ], [ '<em>Indexed</em>!\n1', '<em>Indexed</em>!\n2', '<em>Indexed</em>!\n3' ]) self.assertEqual(self.sb.search('Indx')['hits'], 0) self.assertEqual( self.sb.search('Indx')['spelling_suggestion'], 'index') self.assertEqual( self.sb.search('Indx', spelling_query='indexy')['spelling_suggestion'], 'index') self.assertEqual(self.sb.search('', facets=['name']), { 'hits': 0, 'results': [] }) results = self.sb.search('Index', facets=['name']) self.assertEqual(results['hits'], 3) self.assertEqual(results['facets']['fields']['name'], [('daniel1', 1), ('daniel2', 1), ('daniel3', 1)]) self.assertEqual( self.sb.search('', date_facets={ 'pub_date': { 'start_date': datetime.date(2008, 2, 26), 'end_date': datetime.date(2008, 3, 26), 'gap_by': 'month', 'gap_amount': 1 } }), { 'hits': 0, 'results': [] }) results = self.sb.search('Index', date_facets={ 'pub_date': { 'start_date': datetime.date(2008, 2, 26), 'end_date': datetime.date(2008, 3, 26), 'gap_by': 'month', 'gap_amount': 1 } }) self.assertEqual(results['hits'], 3) # DRL_TODO: Correct output but no counts. Another case of needing better test data? # self.assertEqual(results['facets']['dates']['pub_date'], {'end': '2008-02-26T00:00:00Z', 'gap': '/MONTH'}) self.assertEqual( self.sb.search('', query_facets=[('name', '[* TO e]')]), { 'hits': 0, 'results': [] }) results = self.sb.search('Index', query_facets=[('name', '[* TO e]')]) self.assertEqual(results['hits'], 3) self.assertEqual(results['facets']['queries'], {'name:[* TO e]': 3}) self.assertEqual( self.sb.search('', narrow_queries=set(['name:daniel1'])), { 'hits': 0, 'results': [] }) results = self.sb.search('Index', narrow_queries=set(['name:daniel1'])) self.assertEqual(results['hits'], 1) # Ensure that swapping the ``result_class`` works. self.assertTrue( isinstance( self.sb.search(u'index document', result_class=MockSearchResult)['results'][0], MockSearchResult)) # Check the use of ``limit_to_registered_models``. self.assertEqual(self.sb.search('', limit_to_registered_models=False), { 'hits': 0, 'results': [] }) self.assertEqual( self.sb.search('*:*', limit_to_registered_models=False)['hits'], 3) self.assertEqual([ result.pk for result in self.sb.search( '*:*', limit_to_registered_models=False)['results'] ], ['1', '2', '3']) # Stow. old_limit_to_registered_models = getattr( settings, 'HAYSTACK_LIMIT_TO_REGISTERED_MODELS', True) settings.HAYSTACK_LIMIT_TO_REGISTERED_MODELS = False self.assertEqual(self.sb.search(''), {'hits': 0, 'results': []}) self.assertEqual(self.sb.search('*:*')['hits'], 3) self.assertEqual( [result.pk for result in self.sb.search('*:*')['results']], ['1', '2', '3']) # Restore. settings.HAYSTACK_LIMIT_TO_REGISTERED_MODELS = old_limit_to_registered_models def test_more_like_this(self): self.sb.update(self.smmi, self.sample_objs) self.assertEqual(self.raw_solr.search('*:*').hits, 3) # A functional MLT example with enough data to work is below. Rely on # this to ensure the API is correct enough. self.assertEqual( self.sb.more_like_this(self.sample_objs[0])['hits'], 0) self.assertEqual([ result.pk for result in self.sb.more_like_this(self.sample_objs[0]) ['results'] ], []) def test_build_schema(self): (content_field_name, fields) = self.sb.build_schema(self.site.all_searchfields()) self.assertEqual(content_field_name, 'text') self.assertEqual(len(fields), 4) self.assertEqual(fields, [{ 'indexed': 'true', 'type': 'text', 'stored': 'true', 'field_name': 'text', 'multi_valued': 'false' }, { 'indexed': 'true', 'type': 'date', 'stored': 'true', 'field_name': 'pub_date', 'multi_valued': 'false' }, { 'indexed': 'true', 'type': 'text', 'stored': 'true', 'field_name': 'name', 'multi_valued': 'false' }, { 'indexed': 'true', 'field_name': 'name_exact', 'stored': 'true', 'type': 'string', 'multi_valued': 'false' }]) self.site.unregister(MockModel) self.site.register(MockModel, SolrComplexFacetsMockSearchIndex) (content_field_name, fields) = self.sb.build_schema(self.site.all_searchfields()) self.assertEqual(content_field_name, 'text') self.assertEqual(len(fields), 15) self.assertEqual(fields, [{ 'indexed': 'true', 'type': 'text', 'stored': 'true', 'field_name': 'name', 'multi_valued': 'false' }, { 'indexed': 'true', 'type': 'boolean', 'stored': 'true', 'field_name': 'is_active_exact', 'multi_valued': 'false' }, { 'indexed': 'true', 'type': 'date', 'stored': 'true', 'field_name': 'created', 'multi_valued': 'false' }, { 'indexed': 'true', 'type': 'slong', 'stored': 'true', 'field_name': 'post_count', 'multi_valued': 'false' }, { 'indexed': 'true', 'type': 'date', 'stored': 'true', 'field_name': 'created_exact', 'multi_valued': 'false' }, { 'indexed': 'true', 'type': 'string', 'stored': 'true', 'field_name': 'sites_exact', 'multi_valued': 'true' }, { 'indexed': 'true', 'type': 'boolean', 'stored': 'true', 'field_name': 'is_active', 'multi_valued': 'false' }, { 'indexed': 'true', 'type': 'text', 'stored': 'true', 'field_name': 'sites', 'multi_valued': 'true' }, { 'indexed': 'true', 'type': 'slong', 'stored': 'true', 'field_name': 'post_count_i', 'multi_valued': 'false' }, { 'indexed': 'true', 'type': 'sfloat', 'stored': 'true', 'field_name': 'average_rating', 'multi_valued': 'false' }, { 'indexed': 'true', 'type': 'text', 'stored': 'true', 'field_name': 'text', 'multi_valued': 'false' }, { 'indexed': 'true', 'type': 'date', 'stored': 'true', 'field_name': 'pub_date_exact', 'multi_valued': 'false' }, { 'indexed': 'true', 'type': 'string', 'stored': 'true', 'field_name': 'name_exact', 'multi_valued': 'false' }, { 'indexed': 'true', 'type': 'date', 'stored': 'true', 'field_name': 'pub_date', 'multi_valued': 'false' }, { 'indexed': 'true', 'type': 'sfloat', 'stored': 'true', 'field_name': 'average_rating_exact', 'multi_valued': 'false' }]) def test_verify_type(self): import haystack haystack.site.unregister(MockModel) haystack.site.register(MockModel, SolrMaintainTypeMockSearchIndex) self.sb.update(self.smtmmi, self.sample_objs) self.assertEqual(self.sb.search('*:*')['hits'], 3) self.assertEqual( [result.month for result in self.sb.search('*:*')['results']], [u'02', u'02', u'02'])
class SolrSearchBackendTestCase(TestCase): def setUp(self): super(SolrSearchBackendTestCase, self).setUp() # Wipe it clean. self.raw_solr = pysolr.Solr(settings.HAYSTACK_SOLR_URL) clear_solr_index() self.site = SearchSite() self.sb = SearchBackend(site=self.site) self.smmi = SolrMockSearchIndex(MockModel, backend=self.sb) self.smtmmi = SolrMaintainTypeMockSearchIndex(MockModel, backend=self.sb) self.site.register(MockModel, SolrMockSearchIndex) # Stow. import haystack self.old_site = haystack.site haystack.site = self.site self.sample_objs = [] for i in xrange(1, 4): mock = MockModel() mock.id = i mock.author = "daniel%s" % i mock.pub_date = datetime.date(2009, 2, 25) - datetime.timedelta(days=i) self.sample_objs.append(mock) def tearDown(self): import haystack haystack.site = self.old_site super(SolrSearchBackendTestCase, self).tearDown() def test_update(self): self.sb.update(self.smmi, self.sample_objs) # Check what Solr thinks is there. self.assertEqual(self.raw_solr.search("*:*").hits, 3) self.assertEqual( self.raw_solr.search("*:*").docs, [ { "django_id": "1", "django_ct": "core.mockmodel", "name": "daniel1", "name_exact": "daniel1", "text": "Indexed!\n1", "pub_date": "2009-02-24T00:00:00Z", "id": "core.mockmodel.1", }, { "django_id": "2", "django_ct": "core.mockmodel", "name": "daniel2", "name_exact": "daniel2", "text": "Indexed!\n2", "pub_date": "2009-02-23T00:00:00Z", "id": "core.mockmodel.2", }, { "django_id": "3", "django_ct": "core.mockmodel", "name": "daniel3", "name_exact": "daniel3", "text": "Indexed!\n3", "pub_date": "2009-02-22T00:00:00Z", "id": "core.mockmodel.3", }, ], ) def test_remove(self): self.sb.update(self.smmi, self.sample_objs) self.assertEqual(self.raw_solr.search("*:*").hits, 3) self.sb.remove(self.sample_objs[0]) self.assertEqual(self.raw_solr.search("*:*").hits, 2) self.assertEqual( self.raw_solr.search("*:*").docs, [ { "django_id": "2", "django_ct": "core.mockmodel", "name": "daniel2", "name_exact": "daniel2", "text": "Indexed!\n2", "pub_date": "2009-02-23T00:00:00Z", "id": "core.mockmodel.2", }, { "django_id": "3", "django_ct": "core.mockmodel", "name": "daniel3", "name_exact": "daniel3", "text": "Indexed!\n3", "pub_date": "2009-02-22T00:00:00Z", "id": "core.mockmodel.3", }, ], ) def test_clear(self): self.sb.update(self.smmi, self.sample_objs) self.assertEqual(self.raw_solr.search("*:*").hits, 3) self.sb.clear() self.assertEqual(self.raw_solr.search("*:*").hits, 0) self.sb.update(self.smmi, self.sample_objs) self.assertEqual(self.raw_solr.search("*:*").hits, 3) self.sb.clear([AnotherMockModel]) self.assertEqual(self.raw_solr.search("*:*").hits, 3) self.sb.clear([MockModel]) self.assertEqual(self.raw_solr.search("*:*").hits, 0) self.sb.update(self.smmi, self.sample_objs) self.assertEqual(self.raw_solr.search("*:*").hits, 3) self.sb.clear([AnotherMockModel, MockModel]) self.assertEqual(self.raw_solr.search("*:*").hits, 0) def test_search(self): self.sb.update(self.smmi, self.sample_objs) self.assertEqual(self.raw_solr.search("*:*").hits, 3) self.assertEqual(self.sb.search(""), {"hits": 0, "results": []}) self.assertEqual(self.sb.search("*:*")["hits"], 3) self.assertEqual([result.pk for result in self.sb.search("*:*")["results"]], ["1", "2", "3"]) self.assertEqual(self.sb.search("", highlight=True), {"hits": 0, "results": []}) self.assertEqual(self.sb.search("Index", highlight=True)["hits"], 3) self.assertEqual( [result.highlighted["text"][0] for result in self.sb.search("Index", highlight=True)["results"]], ["<em>Indexed</em>!\n1", "<em>Indexed</em>!\n2", "<em>Indexed</em>!\n3"], ) self.assertEqual(self.sb.search("Indx")["hits"], 0) self.assertEqual(self.sb.search("Indx")["spelling_suggestion"], "index") self.assertEqual(self.sb.search("Indx", spelling_query="indexy")["spelling_suggestion"], "index") self.assertEqual(self.sb.search("", facets=["name"]), {"hits": 0, "results": []}) results = self.sb.search("Index", facets=["name"]) self.assertEqual(results["hits"], 3) self.assertEqual(results["facets"]["fields"]["name"], [("daniel1", 1), ("daniel2", 1), ("daniel3", 1)]) self.assertEqual( self.sb.search( "", date_facets={ "pub_date": { "start_date": datetime.date(2008, 2, 26), "end_date": datetime.date(2008, 3, 26), "gap_by": "month", "gap_amount": 1, } }, ), {"hits": 0, "results": []}, ) results = self.sb.search( "Index", date_facets={ "pub_date": { "start_date": datetime.date(2008, 2, 26), "end_date": datetime.date(2008, 3, 26), "gap_by": "month", "gap_amount": 1, } }, ) self.assertEqual(results["hits"], 3) # DRL_TODO: Correct output but no counts. Another case of needing better test data? # self.assertEqual(results['facets']['dates']['pub_date'], {'end': '2008-02-26T00:00:00Z', 'gap': '/MONTH'}) self.assertEqual(self.sb.search("", query_facets=[("name", "[* TO e]")]), {"hits": 0, "results": []}) results = self.sb.search("Index", query_facets=[("name", "[* TO e]")]) self.assertEqual(results["hits"], 3) self.assertEqual(results["facets"]["queries"], {"name:[* TO e]": 3}) self.assertEqual(self.sb.search("", narrow_queries=set(["name:daniel1"])), {"hits": 0, "results": []}) results = self.sb.search("Index", narrow_queries=set(["name:daniel1"])) self.assertEqual(results["hits"], 1) # Ensure that swapping the ``result_class`` works. self.assertTrue( isinstance(self.sb.search(u"index document", result_class=MockSearchResult)["results"][0], MockSearchResult) ) # Check the use of ``limit_to_registered_models``. self.assertEqual(self.sb.search("", limit_to_registered_models=False), {"hits": 0, "results": []}) self.assertEqual(self.sb.search("*:*", limit_to_registered_models=False)["hits"], 3) self.assertEqual( [result.pk for result in self.sb.search("*:*", limit_to_registered_models=False)["results"]], ["1", "2", "3"], ) # Stow. old_limit_to_registered_models = getattr(settings, "HAYSTACK_LIMIT_TO_REGISTERED_MODELS", True) settings.HAYSTACK_LIMIT_TO_REGISTERED_MODELS = False self.assertEqual(self.sb.search(""), {"hits": 0, "results": []}) self.assertEqual(self.sb.search("*:*")["hits"], 3) self.assertEqual([result.pk for result in self.sb.search("*:*")["results"]], ["1", "2", "3"]) # Restore. settings.HAYSTACK_LIMIT_TO_REGISTERED_MODELS = old_limit_to_registered_models def test_use_correct_site(self): import haystack test_site = SearchSite() test_site.register(MockModel, SolrMockSearchIndex) self.sb.update(self.smmi, self.sample_objs) # Make sure that ``_process_results`` uses the right ``site``. self.assertEqual(self.sb.search("*:*")["hits"], 3) self.assertEqual([result.pk for result in self.sb.search("*:*")["results"]], ["1", "2", "3"]) haystack.site.unregister(MockModel) self.assertEqual(len(haystack.site.get_indexed_models()), 0) self.sb.site = test_site self.assertTrue(len(self.sb.site.get_indexed_models()) > 0) # Should still be there, despite the main ``site`` not having that model # registered any longer. self.assertEqual(self.sb.search("*:*")["hits"], 3) self.assertEqual([result.pk for result in self.sb.search("*:*")["results"]], ["1", "2", "3"]) # Unregister it on the backend & make sure it takes effect. self.sb.site.unregister(MockModel) self.assertEqual(len(self.sb.site.get_indexed_models()), 0) self.assertEqual(self.sb.search("*:*")["hits"], 0) # Nuke it & fallback on the main ``site``. self.sb.site = haystack.site self.assertEqual(self.sb.search("*:*")["hits"], 0) haystack.site.register(MockModel, SolrMockSearchIndex) self.assertEqual(self.sb.search("*:*")["hits"], 3) def test_more_like_this(self): self.sb.update(self.smmi, self.sample_objs) self.assertEqual(self.raw_solr.search("*:*").hits, 3) # A functional MLT example with enough data to work is below. Rely on # this to ensure the API is correct enough. self.assertEqual(self.sb.more_like_this(self.sample_objs[0])["hits"], 0) self.assertEqual([result.pk for result in self.sb.more_like_this(self.sample_objs[0])["results"]], []) def test_build_schema(self): (content_field_name, fields) = self.sb.build_schema(self.site.all_searchfields()) self.assertEqual(content_field_name, "text") self.assertEqual(len(fields), 4) self.assertEqual( fields, [ {"indexed": "true", "type": "text", "stored": "true", "field_name": "text", "multi_valued": "false"}, { "indexed": "true", "type": "date", "stored": "true", "field_name": "pub_date", "multi_valued": "false", }, {"indexed": "true", "type": "text", "stored": "true", "field_name": "name", "multi_valued": "false"}, { "indexed": "true", "field_name": "name_exact", "stored": "true", "type": "string", "multi_valued": "false", }, ], ) self.site.unregister(MockModel) self.site.register(MockModel, SolrComplexFacetsMockSearchIndex) (content_field_name, fields) = self.sb.build_schema(self.site.all_searchfields()) self.assertEqual(content_field_name, "text") self.assertEqual(len(fields), 15) self.assertEqual( fields, [ {"indexed": "true", "type": "text", "stored": "true", "field_name": "name", "multi_valued": "false"}, { "indexed": "true", "type": "boolean", "stored": "true", "field_name": "is_active_exact", "multi_valued": "false", }, {"indexed": "true", "type": "date", "stored": "true", "field_name": "created", "multi_valued": "false"}, { "indexed": "true", "type": "slong", "stored": "true", "field_name": "post_count", "multi_valued": "false", }, { "indexed": "true", "type": "date", "stored": "true", "field_name": "created_exact", "multi_valued": "false", }, { "indexed": "true", "type": "string", "stored": "true", "field_name": "sites_exact", "multi_valued": "true", }, { "indexed": "true", "type": "boolean", "stored": "true", "field_name": "is_active", "multi_valued": "false", }, {"indexed": "true", "type": "text", "stored": "true", "field_name": "sites", "multi_valued": "true"}, { "indexed": "true", "type": "slong", "stored": "true", "field_name": "post_count_i", "multi_valued": "false", }, { "indexed": "true", "type": "sfloat", "stored": "true", "field_name": "average_rating", "multi_valued": "false", }, {"indexed": "true", "type": "text", "stored": "true", "field_name": "text", "multi_valued": "false"}, { "indexed": "true", "type": "date", "stored": "true", "field_name": "pub_date_exact", "multi_valued": "false", }, { "indexed": "true", "type": "string", "stored": "true", "field_name": "name_exact", "multi_valued": "false", }, { "indexed": "true", "type": "date", "stored": "true", "field_name": "pub_date", "multi_valued": "false", }, { "indexed": "true", "type": "sfloat", "stored": "true", "field_name": "average_rating_exact", "multi_valued": "false", }, ], ) def test_verify_type(self): import haystack haystack.site.unregister(MockModel) haystack.site.register(MockModel, SolrMaintainTypeMockSearchIndex) self.sb.update(self.smtmmi, self.sample_objs) self.assertEqual(self.sb.search("*:*")["hits"], 3) self.assertEqual([result.month for result in self.sb.search("*:*")["results"]], [u"02", u"02", u"02"])