mamori017.log

おじさんの作業記録

Elasticsearchを5.4.0にアップデートしたら起動しなくなった

いつも通りUbuntuのパッケージを更新したらElasticsearchとKibanaが5.4.0にアップデートされてしまった。 更新してしまったものは仕方がないので起動確認したところ、Kibanaはブラウザで表示されるもののElasticsearchが起動しなくなった。

Elasticsearchを手動起動しても[ ok ] Starting elasticsearch (via systemctl): elasticsearch.service.と出力されるだけで、 service --status-allで状況を確認しても起動していない様子。 ログが出ていないか/var/log/elasticsearch/elasticesarch.logを見てみたところ、kuromojiプラグインに関連するエラーが出力されていた。

[2017-05-07T03:26:49,559][ERROR][o.e.b.Bootstrap          ] Exception
java.lang.IllegalArgumentException: plugin [analysis-kuromoji] is incompatible with version [5.4.0]; was designed for version [5.0.0-alpha5]
        at org.elasticsearch.plugins.PluginInfo.readFromProperties(PluginInfo.java:146) ~[elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.bootstrap.Spawner.spawnNativePluginControllers(Spawner.java:86) ~[elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:167) ~[elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:360) [elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:123) [elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:114) [elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:67) [elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:122) [elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.cli.Command.main(Command.java:88) [elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:91) [elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:84) [elasticsearch-5.4.0.jar:5.4.0]
[2017-05-07T03:26:49,564][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.IllegalArgumentException: plugin [analysis-kuromoji] is incompatible with version [5.4.0]; was designed fo                                                                    r version [5.0.0-alpha5]
        at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:127) ~[elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:114) ~[elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:67) ~[elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:122) ~[elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.cli.Command.main(Command.java:88) ~[elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:91) ~[elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:84) ~[elasticsearch-5.4.0.jar:5.4.0]
Caused by: java.lang.IllegalArgumentException: plugin [analysis-kuromoji] is incompatible with version [5.4.0]; was designed for version [5.0.0-alpha5]
        at org.elasticsearch.plugins.PluginInfo.readFromProperties(PluginInfo.java:146) ~[elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.bootstrap.Spawner.spawnNativePluginControllers(Spawner.java:86) ~[elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:167) ~[elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:360) ~[elasticsearch-5.4.0.jar:5.4.0]
        at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:123) ~[elasticsearch-5.4.0.jar:5.4.0]
        ... 6 more

インストールされているkuromojiプラグインは5.0.0-alpha5用で5.4.0には対応していない(と書かれている気がする)ようなので、 kuromojiプラグインを最新版に更新する。プラグインの上書きインストールをしようとするとエラーになるので削除後再インストールする。

# 削除
sudo bin/elasticsearch-plugin remove analysis-kuromoji

# インストール
sudo bin/elasticsearch-plugin install analysis-kuromoji

kuromojiプラグインを再インストール後はElasticsearchが起動するようになった。

高速スケーラブル検索エンジン ElasticSearch Server (アスキー書籍)

高速スケーラブル検索エンジン ElasticSearch Server (アスキー書籍)

ASPでSessionオブジェクトから変数名と値を取得する

ASPでSessionオブジェクトから変数名と値を取得する方法。デバッグの時には大抵書いているコード。

Dim strKey

For Each strKey in Session.Contents
  Response.Write(strKey & ":" & Session.Contents(strKey) & "<BR>")
Next

SQLでAVG()とCOUNT()はNULLを無視する

ColumnA ColumnB
100 100
200 200
300 300
400 NULL
500 500

テーブルが上記の状態のとき、ColumnA、ColumnBに対して集合関数を使用してみると以下のような結果が出力される。

ColumnA

SUM MAX MIN AVG COUNT
1500 500 100 300 5

ColumnB

SUM MAX MIN AVG COUNT
1100 500 100 275 4

集合関数を使用する列にNULLが含まれる場合、AVG( )とCOUNT( )についてはNULLが無視された結果が出力される。 COUNT( )は「総レコード数-NULLレコード数」、AVG( )は「該当レコードの有効値の合計/(総レコード数-NULLレコード数)」なので、レコード数を基準に考えると正確な値は出力されない。

集合関数を使用する場合は、NULLを許容しない(NOT NULL)列だけで使用したり、列にデフォルト制約を使用してNULLが挿入されない状態を作るなどの前提を用意しておくべきだと思うんだけど、もし集合関数の結果にNULLのレコードを含みたい場合はCASE式が使える。

SELECT  AVG(Sub.ColB), COUNT(Sub.ColB)
FROM    (SELECT CASE WHEN ColumnB IS NULL THEN 0
                     ELSE   ColumnB
                     END AS ColB
         FROM   Table) Sub

SQL 第2版 ゼロからはじめるデータベース操作 (プログラミング学習シリーズ)

SQL 第2版 ゼロからはじめるデータベース操作 (プログラミング学習シリーズ)

達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)

達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)