読者です 読者をやめる 読者になる 読者になる

Taste of Tech Topics

Acroquest Technology株式会社のエンジニアが書く技術ブログ

Elasticsearch勉強会 第14回フィードバック

Elasticsearch

こんにちは、fujiiです。

第14回elasticsearch勉強会に参加してきました。

f:id:acro-engineer:20160108014007p:plain


途中、電車遅延の影響で、間に合わないかと焦りましたが、
何とかギリギリで到着でした。

冬なのに、汗かきましたよ。。。


さて、本題に戻り、勉強会の内容を紹介しますね。

ここがツラいよElasticsearch

リクルート高林さんによる「ここがツラいよElasticsearch」

リクルートさんが行っているElasticsearchの活用事例と、
実際に困った問題を教えてくれました。

前半は、リクルートさんのElasticsearchの活用事例の紹介でした。

こちらについては、以前、ブログで紹介しているので、
以下を参照ください。

Elastic{ON} Tokyo 2015レポート 〜事例紹介 その1 リクルートテクノロジーズ、Naver #elasticon - Taste of Tech Topics


で、本題のElasticsearchの辛いところですが、

1.バージョンアップが辛い。
2.Riverが非推奨になったのが辛い。
3.フィールドに「.」が使えないのが辛い。
4.Replication-Async非推奨が辛い。
5.ズレが辛い。

ということでした。


すごい勢いでバグFixや機能追加を行っているので、
頻繁に更新される一方、
APIも大幅に変更されて困った、
というバージョンアップの辛さはよく耳にしますね。


「ズレが辛い。」というのは気になるところですが、
クラスタを組んでいる場合に、リロケート、リバランス、レプリカ生成中に、
Primaryに更新が行われた場合に、Documentにズレが発生するというもののようです。

後で詳しい話を@ さんに聞きましたが、
consistencyの設定の関係があるそうです。

クラスタを組んでいる場合、
Elasticsearchのデフォルトでは、ノード数 / 2 + 1 のノードのデータが更新されれば、
更新に成功したとみなす動きをします。

例えば、3つのレプリカを作る場合、2ノードで更新処理が成功した場合に、
更新が成功したという動きです。

で、ネットワークの切断などで、
残りの1ノードの更新が失敗していたらどうなるかというと、
更新が失敗した状態で、動いてしまい、そのままでは復旧しないそうです。

これを防ぐには、consistencyをall にする(Index API)と解消されます。

ただし、すべてのレプリカの更新を待つことになるので、インデックスの更新が遅くなり、検索にも影響が出てきます。
システムの特性に合わせて使う必要がありますね。


リクルートさんでは、レプリカのDocumentのズレを検出したら、
もう一度、過去ログの投入からやり直したそうです。


リクルートさんの苦労が感じられました。

機械学習を利用した、ちょっとリッチな検索

PFN久保田さんによる「機械学習を利用した、ちょっとリッチな検索」


機械学習を使うと、どのようなメリットがあるのか、
機械学習はどのように始めればよいのか、
という内容でした。

今回は、記事の分類などで使われる「文書分類」を基に、
機械学習を使う方法を教えてくれました。

簡単に紹介すると、以下のサイクルを覚えるとよいとのこと。

1.ラベル定義
2.データ収集
3.教師データの作成
4.学習
5.適用

また、機械学習の結果をElasticsearchに投入する方法としては、
以下を利用しているとのことでした。

1.オフラインで適用してからElasticsearchに投入する。
2.Jubatusのプラグインを使う。


初心者向けにかみ砕いて説明してくれたので、
わかりやすかったです。

Lucene Query 再考 - Domain Specific Query 実装 -

最後は、Supershipの大川さんによる「Lucene Query 再考 - Domain Specific Query 実装 -」です。

QueryParserに関する基礎知識と
Supershipさんが取り組んでいる内容を説明してくれました。

Elasticsearch では QueryDSLでは、種々のパーサーを使えるが、
1.近傍検索を行うSpanQueryに対応していない。
2.Term結合やSynonymなどの揺らぎに対応できない。

という課題があり、Query Parserのプラグインを開発したとのことでした。


Qiitaにも関連する内容をあげているそうなので、合わせて参照ください。

Domain Specific Query Parser (Hetero Grammatical Query Parser) 実装 - Qiita



実際にPJで適用したときの苦労話も色々きけて、
勉強になりました。

引き続き、参加したいと思います♪

Acroquest Technologyでは、キャリア採用を行っています。


  • 日頃勉強している成果を、AWSHadoop、Storm、NoSQL、SpringBoot、HTML5/CSS3/JavaScriptといった最新の技術を使ったプロジェクトで発揮したい。
  • 社会貢献性の高いプロジェクトに提案からリリースまで携わりたい。
  • 書籍・雑誌等の執筆や対外的な勉強会の開催を通した技術の発信や、社内勉強会での技術情報共有により、技術的に成長したい。
  • OSSの開発に携わりたい。

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
 データ分析で国内に新規市場を生み出す新サービス開発者WANTED! - Acroquest Technology株式会社の新卒・インターンシップ - Wantedly