Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def querySolr(core: String, selectQuery: String, server: SolrClient,
- pageNum: Int, pageStart: Int, pageSize: Int): (Long, SolrDocumentList) = {
- val query = new SolrQuery(core)
- query.setQuery(selectQuery)
- query.setStart(pageStart)
- query.setRows(pageSize)
- val response: QueryResponse = server.query(query)
- val results: SolrDocumentList = response.getResults
- val total = results.getNumFound
- (total, results)
- }
- def pageCalc(page: Int, pageSize: Int, totalItems: Long): (Int, Long, Long) = {
- val from = ((page - 1) * pageSize) + 1
- val to = totalItems min (from + pageSize - 1)
- val totalPages = (totalItems / pageSize) + (if (totalItems % pageSize > 0) 1 else 0)
- (from, to, totalPages)
- }
- def getRecordsFromSolr(core: String, solrhost: String, userName: String, password: String,
- query: String): List[SolrDocument] = {
- val startTime = System.nanoTime()
- val url = "https://" + solrhost + ":8983/solr/" + core
- val solrPort = 8983
- val builder: SSLContextBuilder = new SSLContextBuilder()
- builder.loadTrustMaterial(null, new TrustSelfSignedStrategy())
- val sslsf: SSLConnectionSocketFactory = new SSLConnectionSocketFactory(
- builder.build(), SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER
- )
- val credsProvider: CredentialsProvider = new BasicCredentialsProvider()
- credsProvider.setCredentials(
- new AuthScope(solrhost, solrPort),
- new UsernamePasswordCredentials(userName, password))
- val httpclient: CloseableHttpClient =HttpClients.custom().setSSLSocketFactory(sslsf).setDefaultCredentialsProvider(credsProvider).build()
- val server: SolrClient = new HttpSolrClient(url, httpclient)
- logger.info("solr connection completed")
- val pageSize = 1000
- var pageNum = 1
- var nextPage: (Int, Long, Long) = (0, 1000, 0)
- var offset: Long = 0
- var totalResult = querySolr(core, query, server, pageNum, 0, pageSize)
- var total = totalResult._1
- var results: List[SolrDocument] = totalResult._2.toList
- while (total > offset) {
- offset += pageSize
- pageNum += 1
- nextPage = pageCalc(pageNum, pageSize, total)
- totalResult = querySolr(core, query, server, pageNum, nextPage._1, pageSize)
- total = totalResult._1
- results = (results ++ totalResult._2.toList)
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement