1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

elastic4sでembeddedでpluginを使う

Posted at

elasticsearchを使ったアプリでテストを書くとき別にあげたelasticsearch使ってたんですが
組み込みの(embedded)使うと便利だよ!という話です

普通に使うだけならサンプル見ながらやればできたんですが
日本でelasticsearchを使う場合だいたいkuromojiとかのpluginを使うと思います。

path.plugins指定すればできるという記事を見つけて試してみたんですが、最新(5.x)のelasticsearchだとエラーになりました。。

Cause: java.lang.IllegalArgumentException: unknown setting [path.plugins] please check that any required plugins are installed, or check the breaking changes documentation for removed settings

どうやらpath.pluginsはなくなったようです。
https://www.elastic.co/guide/en/elasticsearch/reference/current/zip-targz.html#zip-targz-layout

pluginsのDefault Locationが$ES_HOME/pluginsということなので素直にそこにおきましょう。

  val clusterName = "artists"
  val homePath = "./home"

  val settings =  Map(
    "cluster.name" -> clusterName,
    "path.home" -> homePath,
    "path.repo" -> Paths.get(homePath).resolve("repo").toString,
    "path.data" -> Paths.get(homePath).resolve("data").toString
  )

val localNode = LocalNode(settings)

ここでHOMEを./homeにしたので./home/pluginsの下にkuromojiを保存する必要があります。

次にmappingの準備です。
kuromojiのTokenizerはデフォルトでないのでこの辺りのコードをみながら作ってみます。

case object KuromojiTokenizer extends Tokenizer("kuromoji_tokenizer")

case class KuromojiTokenizer(override val name: String) extends CustomizedTokenizer(name) {
 override def build(source: XContentBuilder): Unit = {
   source.field("type", "kuromoji_tokenizer")
 }
}

という訳でmappingはこのようになります

  client.execute {
    createIndex("bands").mappings(
      mapping("artist") as(
        textField("name"),
        textField("description") analyzer "my_analyzer"
      )
  )
  .analysis(
    CustomAnalyzerDefinition(
      "my_analyzer",
      KuromojiTokenizer
    )
  )
}.await

あとは適当なデータを突っ込んでみて

 client.execute {
    indexInto("bands" / "artists") doc Artist("山田太郎", "東京で活躍していたアーティストです") refresh(RefreshPolicy.IMMEDIATE)
  }.await

queryを投げてみます

  val resp = client.execute {
    search("bands" / "artists") query termQuery("description", "東京")
  }.await

完成品はこちらになります

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?