def __search(self): recordsPerPage = self.__portal.recordsPerPage query = formData.get("query") if query is None or query == "": query = "*:*" req = SearchRequest(query) req.setParam("facet", "true") req.setParam("rows", str(recordsPerPage)) req.setParam("facet.field", self.__portal.facetFieldList) req.setParam("facet.sort", "true") req.setParam("facet.limit", str(self.__portal.facetCount)) req.setParam("sort", "f_dc_title asc") # setup facets action = formData.get("action") value = formData.get("value") fq = sessionState.get("fq") if fq is not None: self.__pageNum = 1 req.setParam("fq", fq) if action == "add_fq": self.__pageNum = 1 name = formData.get("name") print " * add_fq: %s" % value req.addParam("fq", URLDecoder.decode(value, "UTF-8")) elif action == "remove_fq": self.__pageNum = 1 req.removeParam("fq", URLDecoder.decode(value, "UTF-8")) elif action == "clear_fq": self.__pageNum = 1 req.removeParam("fq") elif action == "select-page": self.__pageNum = int(value) req.addParam("fq", 'item_type:"object"') portalQuery = self.__portal.query print " * portalQuery=%s" % portalQuery if portalQuery: req.addParam("fq", portalQuery) self.__selected = req.getParams("fq") sessionState.set("fq", self.__selected) sessionState.set("pageNum", self.__pageNum) req.setParam("start", str((self.__pageNum - 1) * recordsPerPage)) print " * search.py:", req.toString(), self.__pageNum out = ByteArrayOutputStream() Services.indexer.search(req, out) self.__result = JsonConfigHelper(ByteArrayInputStream(out.toByteArray())) if self.__result is not None: self.__paging = Pagination(self.__pageNum, int(self.__result.get("response/numFound")), self.__portal.recordsPerPage)
def __search(self): recordsPerPage = self.__portal.recordsPerPage uri = URLDecoder.decode(request.getAttribute("RequestURI")) query = None pagePath = portalId + "/" + pageName if uri != pagePath: query = uri[len(pagePath)+1:] if query is None or query == "": query = formData.get("query") if query is None or query == "": query = "*:*" if query == "*:*": self.__query = "" else: self.__query = query sessionState.set("query", self.__query) # find objects with annotations matching the query if query != "*:*": anotarQuery = self.__query annoReq = SearchRequest(anotarQuery) annoReq.setParam("facet", "false") annoReq.setParam("rows", str(99999)) annoReq.setParam("sort", "dateCreated asc") annoReq.setParam("start", str(0)) anotarOut = ByteArrayOutputStream() Services.indexer.annotateSearch(annoReq, anotarOut) resultForAnotar = JsonConfigHelper(ByteArrayInputStream(anotarOut.toByteArray())) resultForAnotar = resultForAnotar.getJsonList("response/docs") ids = HashSet() for annoDoc in resultForAnotar: annotatesUri = annoDoc.get("annotatesUri") ids.add(annotatesUri) print "Found annotation for %s" % annotatesUri # add annotation ids to query query += ' OR id:("' + '" OR "'.join(ids) + '")' portalSearchQuery = self.__portal.searchQuery if portalSearchQuery == "": portalSearchQuery = query else: if query != "*:*": query += " AND " + portalSearchQuery else: query = portalSearchQuery req = SearchRequest(query) req.setParam("facet", "true") req.setParam("rows", str(recordsPerPage)) req.setParam("facet.field", self.__portal.facetFieldList) req.setParam("facet.sort", "true") req.setParam("facet.limit", str(self.__portal.facetCount)) req.setParam("sort", "f_dc_title asc") # setup facets action = formData.get("verb") value = formData.get("value") fq = sessionState.get("fq") if fq is not None: self.__pageNum = 1 req.setParam("fq", fq) if action == "add_fq": self.__pageNum = 1 name = formData.get("name") print " * add_fq: %s" % value req.addParam("fq", URLDecoder.decode(value, "UTF-8")) elif action == "remove_fq": self.__pageNum = 1 req.removeParam("fq", URLDecoder.decode(value, "UTF-8")) elif action == "clear_fq": self.__pageNum = 1 req.removeParam("fq") elif action == "select-page": self.__pageNum = int(value) req.addParam("fq", 'item_type:"object"') portalQuery = self.__portal.query print " * portalQuery=%s" % portalQuery if portalQuery: req.addParam("fq", portalQuery) self.__selected = list(req.getParams("fq")) sessionState.set("fq", self.__selected) sessionState.set("searchQuery", portalSearchQuery) sessionState.set("pageNum", self.__pageNum) # Make sure 'fq' has already been set in the session if not page.authentication.is_admin(): security_roles = page.authentication.get_roles_list() security_query = 'security_filter:("' + '" OR "'.join(security_roles) + '")' current_user = page.authentication.get_username() owner_query = 'owner:"' + current_user + '"' req.addParam("fq", "(" + security_query + ") OR (" + owner_query + ")") req.setParam("start", str((self.__pageNum - 1) * recordsPerPage)) print " * search.py:", req.toString(), self.__pageNum out = ByteArrayOutputStream() Services.indexer.search(req, out) self.__result = JsonConfigHelper(ByteArrayInputStream(out.toByteArray())) if self.__result is not None: self.__paging = Pagination(self.__pageNum, int(self.__result.get("response/numFound")), self.__portal.recordsPerPage)
def __search(self): recordsPerPage = self.__portal.recordsPerPage query = None if query is None or query == "": query = formData.get("query") if query is None or query == "": query = "*:*" req = SearchRequest(query) req.setParam("facet", "true") req.setParam("rows", "1000") req.setParam("facet.field", self.__portal.facetFieldList) req.setParam("facet.sort", "true") req.setParam("facet.limit", str(self.__portal.facetCount)) req.setParam("sort", "f_dc_title asc") # setup facets action = formData.get("verb") value = formData.get("value") fq = sessionState.get("fq") if fq is not None: self.__pageNum = 1 req.setParam("fq", fq) if action == "add_fq": self.__pageNum = 1 name = formData.get("name") print " * add_fq: %s" % value req.addParam("fq", URLDecoder.decode(value, "UTF-8")) elif action == "remove_fq": self.__pageNum = 1 req.removeParam("fq", URLDecoder.decode(value, "UTF-8")) elif action == "clear_fq": self.__pageNum = 1 req.removeParam("fq") elif action == "select-page": self.__pageNum = int(value) req.addParam("fq", 'item_type:"object"') portalQuery = self.__portal.query print " * portalQuery=%s" % portalQuery if portalQuery: req.addParam("fq", portalQuery) self.__selected = req.getParams("fq") sessionState.set("fq", self.__selected) sessionState.set("pageNum", self.__pageNum) req.setParam("start", str((self.__pageNum - 1) * recordsPerPage)) print " * single.py:", req.toString(), self.__pageNum out = ByteArrayOutputStream() Services.indexer.search(req, out) self.__result = JsonConfigHelper(ByteArrayInputStream(out.toByteArray())) if self.__result is not None: self.__paging = Pagination( self.__pageNum, int(self.__result.get("response/numFound")), self.__portal.recordsPerPage ) print " * single.py: updating manifest..." portal = self.getPortal() manifest = portal.getJsonMap("manifest") # add new items from search for doc in self.__result.getList("response/docs"): hashId = md5.new(doc.get("id")).hexdigest() node = portal.get("manifest//node-%s" % hashId) if node is None: portal.set("manifest/node-%s/title" % hashId, doc.get("dc_title").get(0)) portal.set("manifest/node-%s/id" % hashId, doc.get("id")) # remove manifest items missing from search result # print manifest for key in manifest.keySet(): item = manifest.get(key) id = item.get("id") doc = self.__result.getList('response/docs[@id="%s"]' % id) if len(doc) == 0: portal.removePath("manifest//%s" % key) Services.getPortalManager().save(portal)
def __search(self): requireEscape = False recordsPerPage = self.__portal.recordsPerPage uri = URLDecoder.decode(self.request.getAttribute("RequestURI")) query = None pagePath = self.__portal.getName() + "/" + self.pageName if query is None or query == "": query = self.formData.get("query") requireEscape = True if query is None or query == "": query = "*:*" if query == "*:*": self.__query = "" else: self.__query = query if requireEscape: query = self.__escapeQuery(query) query = "%s:%s" % (self.__searchField, query) self.sessionState.set("query", self.__query) # find objects with annotations matching the query if query != "*:*": anotarQuery = self.__query if requireEscape: anotarQuery = self.__escapeQuery(anotarQuery) annoReq = SearchRequest(anotarQuery) annoReq.setParam("facet", "false") annoReq.setParam("rows", str(99999)) annoReq.setParam("sort", "dateCreated asc") annoReq.setParam("start", str(0)) anotarOut = ByteArrayOutputStream() self.services.indexer.annotateSearch(annoReq, anotarOut) resultForAnotar = SolrResult(ByteArrayInputStream(anotarOut.toByteArray())) resultForAnotar = resultForAnotar.getResults() ids = HashSet() for annoDoc in resultForAnotar: annotatesUri = annoDoc.get("annotatesUri") ids.add(annotatesUri) print "Found annotation for %s" % annotatesUri # add annotation ids to query query += ' OR id:("' + '" OR "'.join(ids) + '")' portalSearchQuery = self.__portal.searchQuery if portalSearchQuery == "": portalSearchQuery = query else: if query != "*:*": query += " AND " + portalSearchQuery else: query = portalSearchQuery req = SearchRequest(query) req.setParam("facet", "true") req.setParam("rows", str(recordsPerPage)) req.setParam("facet.field", self.__portal.facetFieldList) req.setParam("facet.sort", Boolean.toString(self.__portal.getFacetSort())) req.setParam("facet.limit", str(self.__portal.facetCount)) req.setParam("sort", self.__sortBy) # setup facets if self.__useSessionNavigation: action = self.formData.get("verb") value = self.formData.get("value") fq = self.sessionState.get("fq") if fq is not None: self.__pageNum = 1 req.setParam("fq", fq) if action == "add_fq": self.__pageNum = 1 req.addParam("fq", URLDecoder.decode(value, "UTF-8")) elif action == "remove_fq": self.__pageNum = 1 req.removeParam("fq", URLDecoder.decode(value, "UTF-8")) elif action == "clear_fq": self.__pageNum = 1 req.removeParam("fq") elif action == "select-page": self.__pageNum = int(value) else: navUri = uri[len(pagePath):] self.__pageNum, fq, self.__fqParts = self.__parseUri(navUri) savedfq = self.sessionState.get("savedfq") limits = [] if savedfq: limits.extend(savedfq) if fq: limits.extend(fq) self.sessionState.set("savedfq", limits) for q in fq: req.addParam("fq", URLDecoder.decode(q, "UTF-8")) portalQuery = self.__portal.query if portalQuery: req.addParam("fq", portalQuery) req.addParam("fq", 'item_type:"object"') if req.getParams("fq"): self.__selected = ArrayList(req.getParams("fq")) if self.__useSessionNavigation: self.sessionState.set("fq", self.__selected) self.sessionState.set("searchQuery", portalSearchQuery) self.sessionState.set("pageNum", self.__pageNum) # Make sure 'fq' has already been set in the session if not self.page.authentication.is_admin(): current_user = self.page.authentication.get_username() security_roles = self.page.authentication.get_roles_list() security_filter = 'security_filter:("' + '" OR "'.join(security_roles) + '")' security_exceptions = 'security_exception:"' + current_user + '"' owner_query = 'owner:"' + current_user + '"' security_query = "(" + security_filter + ") OR (" + security_exceptions + ") OR (" + owner_query + ")" req.addParam("fq", security_query) req.setParam("start", str((self.__pageNum - 1) * recordsPerPage)) print " * search.py:", req.toString(), self.__pageNum out = ByteArrayOutputStream() self.services.indexer.search(req, out) self.__result = SolrResult(ByteArrayInputStream(out.toByteArray())) if self.__result is not None: self.__paging = Pagination(self.__pageNum, int(self.__result.getNumFound()), self.__portal.recordsPerPage)