Skip to content

haginot/elasticsearch4s

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

92 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

elasticsearch4s Build Status

Scala client and code generator for Elasticsearch

How to use

Add a following dependency into your build.sbt at first.

libraryDependencies += "jp.co.bizreach" %% "elasticsearch4s" % "0.0.11"

You can access Elasticsearch via REST API as following:

case class Tweet(name: String, message: String)

import jp.co.bizreach.elasticsearch4s._

ESClient.using("http://localhost:9200"){ client =>
  val config = ESConfig("twitter", "tweet")

  // Insert
  client.insert(config, Tweet("takezoe", "Hello World!!"))
  client.insertJson(config, """{name: "takezoe", message: "Hello World!!"}""")
  
  // Update
  client.update(config, "1", Tweet("takezoe", "Hello Scala!!"))
  client.updateJson(config, "1", """{name: "takezoe", message: "Hello World!!"}""")

  // Delete
  client.delete(config, "1")

  // Find one document
  val tweet: Option[(String, Tweet)] = client.find[Tweet](config){ seacher =>
    seacher.setQuery(QueryBuilders.termQuery("_id", "1"))
  }

  // Search documents
  val list: List[ESSearchResult] = client.list[Tweet](config){ seacher =>
    seacher.setQuery(QueryBuilders.termQuery("name", "takezoe"))
  }
}

elasticsearch4s is a wrapper of Elasticsearch Java API. Therefore see its document to know details, especially how to build query.

Code Generator

elasticsearch4s-gen can generate source code from Elasticsearch schema json file.

At first, add following setting into project/plugins.sbt:

addSbtPlugin("jp.co.bizreach" % "elasticsearch4s-gen" % "0.0.6")

Then put Elasticsearch schema json file as PROJECT_ROOT/schema.json and execute sbt es-gen. Source code will be generated into src/main/scala/models.

You can configure generation settings in PROJECT_ROOT/es-gen.conf. Here is a configuration example:

# package name
es-gen.package.name=models
# schema definition files
es-gen.json.files=[
  "./schema/book_master.json",
  "./schema/book_search.json"
]
# map same index name to different classes
es-gen.class.mappings=[
  "book_master.json#book:BookMaster",
  "book_search.json#book:BookSearch"
]
# map unknown type
es-gen.type.mappings=[
  "minhash:String"
]
# specify array properties
es-gen.array.properties=[
  "BookMaster.author",
  "BookSearch.author"
]
# specify ignore properties
es-gen.ignore.properties=[
  "internalCode"
]

See ESCodegenConfig.scala to know configuration details.

About

Scala client and code generator for Elasticsearch

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Scala 94.2%
  • Java 3.3%
  • Shell 2.5%