Added support for a simple search result json

master
Abhinav Sarkar 2013-05-20 00:37:23 +05:30
commit 2bf175e705
2 arquivos alterados com 27 adições e 6 exclusões

Ver arquivo

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

Ver arquivo

@ -18,16 +18,28 @@ case class IndexRequest(
case class SearchRequest(
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(
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 {
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())
}
}
case class SimpleSearchResult(
server : String, channel : String, botName : String, query: String,
page : Int, pageSize : Int, totalResults : Int, lines : List[List[List[String]]])