Example #1
0
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
Example #2
0
 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)
Example #3
0
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
Example #4
0
 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)
Example #5
0
 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)
Example #6
0
 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)
Example #7
0
 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)
Example #8
0
 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)
Example #9
0
 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)
Example #10
0
 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)
Example #11
0
 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)
Example #12
0
 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)
Example #13
0
 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)
Example #14
0
 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)