关于用scala 写Elasticsearch +springboot+jpa

本文分享了在项目中使用Scala结合SpringBoot、JPA和Elasticsearch的实践经验,包括配置、映射、JPA规则及关键字详解,适合初学者对比学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于用scala 写Elasticsearch +springboot+jpa

最近在项目中用到这个 框架结构,用起来特别方便,分享下

引包 build.sbt

"org.springframework.boot" % "spring-boot-starter-data-elasticsearch" %verSpringBoot,

配置,我的是springcloud,配置文件配置在对应文件中就行了,

spring:
  data:
    elasticsearch:
      cluster-name: xxxxx
      cluster-nodes: xxx:9300
      

cluster-nodes: xxx:9300

  repositories:
    enabled: true
@Document( indexName = "xxx", `type` = "xxxx" )
@Mapping( mappingPath = "jsons/userjson.json" )
@JsonIdentityInfo( generator = classOf[JSOGGenerator] )
class UserEntity() {
  @BeanProperty
  var id:Long=_
  @BeanProperty
  var uid:String=_
}

映射文件userjson.json

{
  "article": {
    "properties": {
      "id": {
        "type": "long"
      },
      "uid": {
        "type": "keyword"
      ,"index":"false"
      }
    }
  }
}

注,因为springboot不是很兼容elasticsearch 框架,在elasticsearch库中,需要put
我配置的是kibana


PUT /xxx
{
"mappings": {
  "xxx": {
    "properties": {
      "id": {
        "type": "long"
      },
      "uid": {
        "type": "keyword"
      }
}
}
}
}

下面写jpa

@Repository
 trait UserDao extends CrudRepository[UserEntity,java.lang.Long] with ElasticsearchRepository[UserEntity,java.lang.Long]{
//写jpa的规则,就不介绍了,文章最后有个连接,可以借鉴下,这不本文的重点



}

注,因为在有的地方elasticsearch 并不兼容于scala的类型所以在映射的时候尽量用java类型,在其他地方做个隐式转换就好了
隐式转换

import scala.collection.JavaConverters._

jpa关键字介绍下
关键字
使用示例
等同于的ES查询

关键字示例es查询
AndfindByNameAndPrice{“bool” : {“must” : [ {“field” : {“name” : “?”}}, {“field” : {“price” : “?”}} ]}}
OrfindByNameOrPrice{“bool” : {“should” : [ {“field” : {“name” : “?”}}, {“field” : {“price” : “?”}} ]}}
IsfindByName{“bool” : {“must” : {“field” : {“name” : “?”}}}}
NotfindByNameNot{“bool” : {“must_not” : {“field” : {“name” : “?”}}}}
BetweenfindByPriceBetween{“bool” : {“must” : {“range” : {“price” : {“from” : ?,”to” : ?,”include_lower” : true,”include_upper” : true}}}}}
LessThanEqualfindByPriceLessThan{“bool” : {“must” : {“range” : {“price” : {“from” : null,”to” : ?,”include_lower” : true,”include_upper” : true}}}}}
GreaterThanEqualfindByPriceGreaterThan{“bool” : {“must” : {“range” : {“price” : {“from” : ?,”to” : null,”include_lower” : true,”include_upper” : true}}}}}
BeforefindByPriceBefore{“bool” : {“must” : {“range” : {“price” : {“from” : null,”to” : ?,”include_lower” : true,”include_upper” : true}}}}}
AfterfindByPriceAfter{“bool” : {“must” : {“range” : {“price” : {“from” : ?,”to” : null,”include_lower” : true,”include_upper” : true}}}}}
LikefindByNameLike{“bool” : {“must” : {“field” : {“name” : {“query” : “? *”,”analyze_wildcard” : true}}}}}
StartingWithfindByNameStartingWith{“bool” : {“must” : {“field” : {“name” : {“query” : “? *”,”analyze_wildcard” : true}}}}}
EndingWithfindByNameEndingWith{“bool” : {“must” : {“field” : {“name” : {“query” : “*?”,”analyze_wildcard” : true}}}}}
Contains/ContainingfindByNameContaining{“bool” : {“must” : {“field” : {“name” : {“query” : “?”,”analyze_wildcard” : true}}}}}
InfindByNameIn(Collectionnames){“bool” : {“must” : {“bool” : {“should” : [ {“field” : {“name” : “?”}}, {“field” : {“name” : “?”}} ]}}}}
NotInfindByNameNotIn(Collectionnames){“bool” : {“must_not” : {“bool” : {“should” : {“field” : {“name” : “?”}}}}}}
TruefindByAvailableTrue{“bool” : {“must” : {“field” : {“available” : true}}}}
FalsefindByAvailableFalse{“bool” : {“must” : {“field” : {“available” : false}}}}
OrderByfindByAvailableTrueOrderByNameDesc{“sort” : [{ “name” : {“order” : “desc”} }],”bool” : {“must” : {“field” : {“available” : true}}}}

关于jpa的规则,有比较全的介绍博客,推荐下

https://blog.youkuaiyun.com/KingBoyWorld/article/details/78654820

初学者可以对比学习!


仅自勉,履霜坚冰至!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值