Skip to content

Commit

Permalink
adding API route/action for solr search
Browse files Browse the repository at this point in the history
  • Loading branch information
Dan Simon committed Jul 19, 2012
1 parent 43bdb34 commit f8c2749
Show file tree
Hide file tree
Showing 6 changed files with 17 additions and 11 deletions.
5 changes: 4 additions & 1 deletion collins/app/controllers/AssetApi.scala
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package controllers

import actions.asset.{CreateAction, DeleteAction, DeleteAttributeAction, FindAction, FindSimilarAction, GetAction}
import actions.asset.{CreateAction, DeleteAction, DeleteAttributeAction, FindAction, FindSimilarAction, GetAction, SolrFindAction}
import actions.asset.{UpdateAction, UpdateForMaintenanceAction}

import views.html
Expand Down Expand Up @@ -29,6 +29,9 @@ trait AssetApi {
PageParams(page, size, sort), Permissions.AssetApi.GetAssets, this
)

def search(query: String, page: Int, size: Int, sortField: String, sort: String, details: String) =
SolrFindAction(PageParams(page, size, sort), query, (new Truthy(details)).isTruthy, sortField, Permissions.AssetApi.GetAssets, this)

// PUT /api/asset/:tag
def createAsset(tag: String) = CreateAction(Some(tag), None, Permissions.AssetApi.CreateAsset, this)

Expand Down
6 changes: 3 additions & 3 deletions collins/app/controllers/Resources.scala
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package controllers

import actions.asset.{CreateAction, FindSimilarAction}
import actions.resources.{FindAction, IntakeStage1Action, IntakeStage2Action, IntakeStage3Action, SolrFindAction}
import actions.asset.{CreateAction, FindSimilarAction,SolrFindAction}
import actions.resources.{FindAction, IntakeStage1Action, IntakeStage2Action, IntakeStage3Action}

import models._
import views._
Expand All @@ -25,7 +25,7 @@ trait Resources extends Controller {
}

def searchSolr(query: String, details: String, page: Int, size: Int, sort: String) =
SolrFindAction(PageParams(page, size, sort), query, new Truthy(details), Permissions.Resources.Find, this)
SolrFindAction(PageParams(page, size, sort), query, (new Truthy(details)).isTruthy, "tag", Permissions.Resources.Find, this)


def displayCreateForm(assetType: String) = SecureAction { implicit req =>
Expand Down
13 changes: 7 additions & 6 deletions collins/app/controllers/actions/SolrFindAction.scala
Original file line number Diff line number Diff line change
@@ -1,21 +1,22 @@
package controllers
package actions
package resources

import asset.{AssetFinderDataHolder, FindAction => AssetFindAction}
package asset

import asset.{FindAction => AssetFindAction}
import models.{Asset, AssetView, Page, PageParams, Truthy}
import util.SecuritySpecification
import util.plugins.solr._


import play.api.data.Form
import play.api.data.Forms._
import play.api.mvc.Result

case class SolrFindAction (
pageParams: PageParams,
query: String,
details: Truthy,
details: Boolean,
sortField: String,
spec: SecuritySpecification,
handler: SecureController
) extends AssetFindAction(pageParams, spec, handler) with AssetResultsAction {
Expand All @@ -28,14 +29,14 @@ case class SolrFindAction (
.flatMap{_.typeCheck}
.fold[Either[RequestDataHolder, RequestDataHolder]](
error => Left(RequestDataHolder.error400(error)),
expr => Right(SolrQueryDataHolder(CollinsSearchQuery(expr, pageParams)))
expr => Right(SolrQueryDataHolder(CollinsSearchQuery(expr, pageParams, sortField)))
)

override def execute(rd: RequestDataHolder) = rd match {
case SolrQueryDataHolder(query) => {
query.getPage().fold (
error => handleError(RequestDataHolder.error500(error)),
page => handleSuccess(page, details.isTruthy)
page => handleSuccess(page, details)
)
}
}
Expand Down
1 change: 1 addition & 0 deletions collins/app/models/RemoteAssetFinder.scala
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ case class AssetSearchParameters(
val p = params._1.map{case (enum, value) => SolrKeyVal(enum.toString, SolrStringValue(value))} ++
params._2.map{case (assetMeta,value) => SolrKeyVal(assetMeta.name, SolrStringValue(value))} ++
params._3.map{i => SolrKeyVal("ip_address", SolrStringValue(i))}
val allkeyvals = p ++ afinder.toSolrKeyVals
operation.map{_.toUpperCase} match {
case Some("OR") => SolrOrOp(p)
case _ => SolrAndOp(p)
Expand Down
2 changes: 1 addition & 1 deletion collins/app/util/Solr.scala
Original file line number Diff line number Diff line change
Expand Up @@ -502,7 +502,7 @@ class CollinsQueryParser extends JavaTokenParsers {
/**
* Note - eventually this can hold faceting information and other metadata
*/
case class CollinsSearchQuery(query: SolrExpression, page: PageParams) {
case class CollinsSearchQuery(query: SolrExpression, page: PageParams, sortField: String) {

def getResults(): Either[String, (Seq[AssetView], Long)] = Solr.server.map{server =>
val q = new SolrQuery
Expand Down
1 change: 1 addition & 0 deletions collins/conf/routes
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ POST /api/asset/:tag app.Api.updateAsset(tag: String)
DELETE /api/asset/:tag app.Api.deleteAsset(tag: String)
GET /api/asset/:tag app.Api.getAsset(tag: String, location: Option[String])
GET /api/assets app.Api.getAssets(page: Int ?= 0, size: Int ?= 10, sort: String ?= "DESC")
GET /api/assets/search app.Api.search(query: String, page: Int ?=0, size: Int ?= 50, sortField: String ?= "tag", sort: String ?= "ASC", details: String ?= "false")
GET /api/asset/:tag/similar app.Api.similar(tag: String, page: Int ?= 0, size: Int ?= 50, sort: String ?= "ASC")

GET /api/tags app.Api.getTags
Expand Down

0 comments on commit f8c2749

Please sign in to comment.