def _constructSolrQuery()

in plugins/slcp/content/Writer.py [0:0]


    def _constructSolrQuery(self, startIndex, entriesPerPage, parameters, facets):
        queries = []
        filterQueries = []
        filterQueries.append('status:1')
        sort = None

        for key, value in parameters.items():
            if value != "":
                if key == 'keyword':
                    #Special case keyword search on glossary_items only match title
                    if 'table' in parameters and parameters['table'] == 'glossary_items':
                        queries.append('title_t:('+urllib.parse.quote(value) + ')')
                    else:
                        queries.append(urllib.parse.quote(value))
                elif key == 'year':
                    start = value + "-01-01T00:00:00.000Z"
                    end = value + "-12-31T23:59:59.999Z"
                    filterQueries.append('created_at:['+start+'%20TO%20'+end+']')
                elif key == 'table':
                    filterQueries.append('type:' + value)
                elif key == 'glossary_title':
                    range = value.lower().split('-')
                    filterQueries.append('{!frange%20l=' + range[0] + '%20u=' + range[1] + 'z}' + 'title_lc')
                elif key == 'sort':
                    sort = urllib.parse.quote(value)
                elif key == 'topic_id':
                    filterQueries.append('categories_id:' + value)
                elif key == 'mission_id':
                    filterQueries.append('mission_ids_array:' + value)
                else:
                    if type(value) is list:
                        if 'table' in parameters and parameters['table'] == 'news_items':
                            filterQueries.append(key + ':(' + '+OR+'.join([self._urlEncodeSolrQueryValue(v) for v in value]) + ')')
                        else:
                            for v in value:
                                filterQueries.append(key + ':' + self._urlEncodeSolrQueryValue(v))
                    else:
                        filterQueries.append(key + ':' + self._urlEncodeSolrQueryValue(value))
        if len(queries) == 0:
            queries.append('*:*')

        query = 'q='+'+AND+'.join(queries)+'&version=2.2&indent=on&wt=json&start='+str(startIndex)+'&rows='+str(entriesPerPage)

        if len(filterQueries) > 0:
            query += '&fq='+'+AND+'.join(filterQueries)

        if sort is not None:
            query += '&sort=' + sort

        logging.debug('solr query: '+query)

        return query