def solr_query(q='*:*', sort='', fq='', start=0, docs=10, date='', facets=False): """ Führt Suche gegen Solr aus und gibt ein Dict zurück. Das Dict hat folgende Einträge: ids: Die IDs der Dokumente in der richtigen Sortierung result.docs: Die Treffer-Dokumente params: Die Qeury-Parameter, die Solr verwendet hat result.rows: Anzahl der zurückgegebenen Dokumente result.numhits: Anzahl der Treffer, die es zu der Anfrage gibt result.start: Index des ersten zurückgegebenen Treffers result.maxscore: Höchster score-Wert im gesamten Suchergebnis result.highlighting: Felder mit hervorgehobenen Suchbegriffen ... (to be continued) """ slr = solr.SolrConnection(config.SOLR_URL) sort = sort.strip() fq = [fq.strip()] start = int(start) docs = min(int(docs), 100) date_from = None date_to = None if date.strip() != '': (date_from, date_to) = date_range.to_dates(date.strip()) # Datumsbereich wird als fq Filter hinzugefügt fq.append('date:[' + date_from.isoformat() + 'T00:00:00Z TO ' + date_to.isoformat() + 'T23:59:59Z]') if facets == False: facets = 'false' else: facets = 'true' if q == '*:*' and sort == '': sort = 'date desc' else: if sort == '': sort = 'score desc' response = slr.query(q, fields='reference,score', score=True, highlight='title', sort=sort, rows=docs, fq=fq, start=start, facet=facets) # standard return object ret = { 'status': response.header['status'], 'querytime': response.header['QTime'] } params_to_return = ['q', 'fq', 'sort', 'rows', 'start'] if 'params' in response.header: ret['params'] = {} for param in params_to_return: if param in response.header['params']: ret['params'][param] = response.header['params'][param] if int(response.header['status']) == 0: ret['result'] = {} ret['result']['rows'] = len(response) ret['result']['numhits'] = int(response.results.numFound) if int(response.results.numFound) > 0: if len(response) > 0: # IDs sammeln ret['ids'] = [doc['reference'] for doc in response.results] ret['result']['sort'] = sort ret['result']['start'] = int(response.results.start) ret['result']['docs'] = parse_result_docs(response.results) ret['result']['maxscore'] = float(response.results.maxScore) if len(response) > 0 and hasattr(response, 'highlighting'): ret['result']['highlighting'] = response.highlighting if hasattr(response, 'facet_counts'): facet_fields = response.facet_counts['facet_fields'] ret['result']['facets'] = { 'committee': facet_fields['committee'], 'person': facet_fields['person'], 'type': facet_fields['type'], 'street': facet_fields['street'], 'term': facet_fields['term'], 'date': parse_result_daterange_monthly( response.facet_counts['facet_ranges']['date']) } return ret
def test_string12(self): d = (datetime.date(year=1, month=1, day=1), datetime.date(year=2011, month=12, day=31)) self.assertEqual(date_range.to_dates('-2011'), d)
def test_string7(self): d = (datetime.date(year=2011, month=4, day=1), datetime.date(year=2012, month=3, day=31)) self.assertEqual(date_range.to_dates('201104-201203'), d)
def test_string11(self): d = (datetime.date(year=2011, month=4, day=8), datetime.date(year=9999, month=12, day=31)) self.assertEqual(date_range.to_dates('20110408-'), d)
def test_string19(self): d = (datetime.date(year=2013, month=2, day=1), datetime.date(year=2013, month=2, day=28)) self.assertEqual(date_range.to_dates('201302'), d)
def test_string3(self): d = (datetime.date(year=2012, month=10, day=1), datetime.date(year=2012, month=10, day=1)) self.assertEqual(date_range.to_dates('20121001'), d)
def test_string13(self): d = (datetime.date(year=1, month=1, day=1), datetime.date(year=2011, month=4, day=30)) self.assertEqual(date_range.to_dates('-201104'), d)
def test_string14(self): d = (datetime.date(year=1, month=1, day=1), datetime.date(year=2011, month=4, day=8)) self.assertEqual(date_range.to_dates('-20110408'), d)
def test_string9(self): d = (datetime.date(year=2011, month=1, day=1), datetime.date(year=9999, month=12, day=31)) self.assertEqual(date_range.to_dates('2011-'), d)