Play2-Elasticsearch: 快速、高效的Elasticsearch集成框架
Play2-Elasticsearch是一个用于集成Elasticsearch到Play Framework 2.x应用程序的高效、灵活的框架。
项目简介
该项目的目标是简化在Play应用中与Elasticsearch之间的交互,提供简单易用的API,使开发人员能够更专注于实现业务逻辑。通过使用Play2-Elasticsearch,您可以快速地在您的应用中实现搜索、索引和分析功能。
功能特性
- 类型安全:使用Scala强大的类型系统提供类型安全的操作。
- 异步操作:基于 Akka Streams 和 CompletableFuture 的支持,实现异步、非阻塞操作。
- 易于使用:简洁、直观的 API 设计,让开发者快速上手。
- 自定义配置:支持自定义 Elasticsearch 集群连接参数和客户端配置。
- 多种操作:提供了丰富的 CRUD 操作及聚合查询方法。
示例用法
以下是一些简单的示例,展示如何使用 Play2-Elasticsearch 在 Play 应用程序中创建文档和执行搜索。
首先,确保已添加依赖:
libraryDependencies += "com.cleverage" %% "play2-elasticsearch" % "0.16.0"
然后,在模型类中使用@Document
注解:
import play.api.libs.json._
import com.cleverage.elasticsearch.model.Document
import reactivemongo.bson._
@Document(index = "test", type = "doc")
case class TestDoc(id: Option[BSONObjectID], name: String, age: Int)
object TestDoc {
implicit val format: Format[TestDoc] = Json.format[TestDoc]
}
接下来,编写一个控制器来处理 CRUD 操作:
import javax.inject._
import akka.stream.Materializer
import com.cleverage.elasticsearch.action.index._
import com.cleverage.elasticsearch.action.search._
import play.api.mvc._
import scala.concurrent.ExecutionContext.Implicits.global
@Singleton
class DocController @Inject()(cc: ControllerComponents)(implicit mat: Materializer)
extends AbstractController(cc) {
def create() = Action.async { implicit request =>
val doc = TestDoc(None, "John Doe", 30)
IndexAction[TestDoc].create(doc).map(_ => Ok("Document created"))
}
def search(query: Option[String]) = Action.async { implicit request =>
val queryFilter = query.map(q => Query.Bool.filter(Query.Terms("name", q)))
val searchRequest = SearchRequest[TestDoc](queryFilter).limit(10)
SearchAction[TestDoc].execute(searchRequest).map(_.hits.hits.map(_.source)).map hits =>
Ok(Json.toJson(hits))
}
}
现在你可以尝试访问控制器中的 create()
和 search()
方法以体验 Play2-Elasticsearch 提供的功能。
项目链接
赶快尝试 Play2-Elasticsearch,为您的 Play 应用程序带来更强大的搜索引擎和数据分析能力吧!