Added support for a simple search result json

master
Abhinav Sarkar 2013-05-20 00:37:23 +05:30
parent 2d50b9bb73
commit 2bf175e705
2 changed files with 27 additions and 6 deletions

View File

@ -199,21 +199,30 @@ object SearchHandler extends HttpRequestHandler {
val query = params("query")(0) val query = params("query")(0)
val page = params.get("page").collect({ case l => l.get(0) }) val page = params.get("page").collect({ case l => l.get(0) })
val pageSize = params.get("pageSize").collect({ case l => l.get(0) }) val pageSize = params.get("pageSize").collect({ case l => l.get(0) })
val details = params.get("details").collect({ case l => l.get(0) })
var sr = new SearchRequest(server, channel, botName, query) var sr = new SearchRequest(server, channel, botName, query)
if (page.isDefined) if (page.isDefined)
sr = sr.copy(page = page.get.toInt) sr = sr.copy(page = page.get.toInt)
if (pageSize.isDefined) if (pageSize.isDefined)
sr = sr.copy(pageSize = pageSize.get.toInt) sr = sr.copy(pageSize = pageSize.get.toInt)
if (details.isDefined)
sr = sr.copy(details = details.get.toBoolean)
sr sr
} else { } else {
throw new UnsupportedOperationException("HTTP method " + method + " is not supported") throw new UnsupportedOperationException("HTTP method " + method + " is not supported")
} }
Searcher.search(searchRequest) (searchRequest, Searcher.search(searchRequest))
} }
f onSuccess { f onSuccess {
case searchResult => case (searchRequest, searchResult) =>
logRequest(ctx, request, sendSuccess(ctx, request, Serialization.write(searchResult))) logRequest(ctx, request,
sendSuccess(ctx, request,
if (searchRequest.details)
Serialization.write(searchResult)
else
Serialization.write(searchResult.toSimpleSearchResult)))
} }
f onFailure { case e : Exception => { f onFailure { case e : Exception => {
logger.error("Error", e) logger.error("Error", e)

View File

@ -18,16 +18,28 @@ case class IndexRequest(
case class SearchRequest( case class SearchRequest(
server : String, channel : String, botName : String, query: String, server : String, channel : String, botName : String, query: String,
page : Int = 0, pageSize : Int = 10) page : Int = 0, pageSize : Int = 10, details : Boolean = false)
case class SearchResult( case class SearchResult(
server : String, channel : String, botName : String, query: String, server : String, channel : String, botName : String, query: String,
page : Int, pageSize : Int, totalResults : Int, chatLines : List[ChatLine]) page : Int, pageSize : Int, totalResults : Int, chatLines : List[ChatLine]) {
def toSimpleSearchResult =
SimpleSearchResult(server, channel, botName, query, page, pageSize, totalResults,
chatLines map {
case mline@ChatLine(_, _, _, contextBefore, contextAfter) =>
((contextBefore :+ mline) ++ contextAfter) map { line =>
List(line.timestamp.toString, line.user, line.message)
}
})
}
object SearchResult { object SearchResult {
def fromSearchRequest(searchRequest : SearchRequest) = searchRequest match { def fromSearchRequest(searchRequest : SearchRequest) = searchRequest match {
case SearchRequest(server, channel, botName, query, page, pageSize) => case SearchRequest(server, channel, botName, query, page, pageSize, _) =>
new SearchResult(server, channel, botName, query, page, pageSize, 0, List()) new SearchResult(server, channel, botName, query, page, pageSize, 0, List())
} }
} }
case class SimpleSearchResult(
server : String, channel : String, botName : String, query: String,
page : Int, pageSize : Int, totalResults : Int, lines : List[List[List[String]]])