【发布时间】:2023-03-14 09:50:02
【问题描述】:
我想要实现的是:创建一个 API,它在 ElasticSearch 中寻找。我的编程语言是 Scala。
//myRoute.scala
val pencarianES =
{
post
{
path("cariES")
{
parameters("xQuery", "xNilai")
{
(yQuery, yNilai) =>
val PR = new ProsesRekomendasi
respondWithMediaType(MediaTypes.`application/json`)
{
complete
{
PR.ambilDariES(yQuery, yNilai)
}
}
}
}
}
}
//prosesRekomendasi.scala
class ProsesRekomendasi
{
val ESM = new ESManager
val CLT = ESM.client
def ambilDariES(pQuery:String, pNilai:String) =
{
CLT.prepareSearch("app_lr_portal_01")
.setTypes("lr01")
.setQuery(QueryBuilders.termQuery(s"$pQuery",s"$pNilai"))
.execute()
.actionGet()
}
}
错误是:
could not find implicit value for parameter marshaller:
spray.httpx.marshalling.ToResponseMarshaller[org.eleasticsearch.action.search.SearchResponse]
PR.ambilDariES(yQuery, yNilai)
我在谷歌寻找,并创立了 DefaultMarshallers missing with scala and spray-routing
然后,我按照说明进行操作:
def ambilDariES(pQuery:String, pNilai:String)(implicit ec:ExecutionContext) =
{
CLT.prepareSearch("app_lr_portal_01")
.setTypes("lr01")
.setQuery(QueryBuilders.termQuery(s"$pQuery",s"$pNilai"))
.execute()
.actionGet()
}
最后,我得到另一个错误是:
Cannot find an implicit ExecutionContext, either import scala.concurrent.ExecutionContext.Implicits.global or use a custom one
PR.ambilDariES(yQuery, yNilai)
任何想法,如何处理?感谢您的帮助!
【问题讨论】:
-
首先,我建议您在代码示例中使用英语,因为这样可以减轻阅读您代码的人的认知负担。对于第一个错误 - spray 不知道如何编组 SearchResponse,如果 ElasticSearch API 不提供编组器,则需要显式提供编组器。该文档应该让您对后续步骤有所了解:spray.io/documentation/1.2.2/spray-httpx/marshalling 对于您的最后一个错误 - 您是否尝试按照它的要求执行?
-
好的,请原谅我@Tim。是的,我做到了。呵呵
-
@Tim 先生,我遇到了类似 SunBright 的问题。有什么想法吗?
标签: json scala elasticsearch akka