Carpe Diem

備忘録

Elasticsearch

Multi Match Queryのtypeの違い

概要 以前Bool Query と Dis Max Query の違いについて書きました。 今回はその中で出てきたMulti Match Queryのtypeの違いについて書きます。 どれも複数のフィールドに対して実行するクエリですが、それぞれ用途が異なります。 環境 Elasticsearch 6.6.0 …

docker-compose で Kibana 5.x を使う

概要 Kibanaを5.xにメジャーアップデートする際、Elastic社公式のdocker imageも用意されたのでdocker-composeでまとめて作ることにしました。 その際調べたこと、ハマったことをまとめます。 環境 docker 17.03.1-ce docker-compose 1.11.2 Elasticsearch 5…

Elasticsearchの前方一致について考える

概要 以前Prefix Query の注意 - Carpe Diemで述べたように、PrefixQueryはsearch queryがnot_analyzedになるので意図しない結果になることがあります。 一方で前方一致は検索の利便性を向上させる上でメリットが大きいので、入れておきたい要素でもあります…

Elasticsearchでスコアに重み付けを行う

概要 SEO対策という言葉があるように、Googleの検索結果は単なる文字列の一致率ではなくホームページ自体にスコアが付けられており、それを元に検索の順位が決まります。 今回はElasticsearchでそのようなスコア順に並べる方法を説明します。 環境 Elasticse…

MongoDBのデータをElasticsearchにリアルタイム同期

概要 以前はMongoRiverを使う - Carpe Diemで紹介したようにRiverという機能を使って同期を実現させていました。 しかしながらElasticsearchがRiverを廃止することを決め、バージョン2.x以降は使うことができなくなりました。 そこで調べてみて挙がったのは…

Elasticsearchでの文字列の正規化

概要 検索システムを扱う上で文字列の正規化は非常に重要な要素です。 大抵納品されるデータはフォーマットがバラバラ(全角半角、カタカナひらがなが統一されないなど)なので、この正規化によってある程度統一させることで検索の精度を向上できます。 環境…

neologdでkuromojiを新語に対応させる

概要 Elasticsearchの日本語の形態素解析をする際に利用されるkuromojiは非常に便利ですが、その辞書であるIPADICは更新が止まっているためやや古い状態です。 その辞書を更新してくださった方がいらっしゃり、neologdとして公開されているためそれを導入し…

Prefix Query の注意

概要 ElasticsearchのPrefix Query を使用する時に詰まったところをまとめました。 環境 Elasticsearch 2.3.2 通常の利用方法 マッピング・データ用意 マッピングを設定します。 項目 設定値 インデックス名 test タイプ名 internet フィールド名 name で設…

Bool Query と Dis Max Query の違い

概要 Bool QueryとDis Max Queryの違いが曖昧だったのでちゃんと調べました。 環境 Ubuntu 14.04 Elasticsearch 2.2.0 データ投入 curl -s -XPOST localhost:9200/my_index/my_type/_bulk -d ' {"index": {"_id": "1"}} {"title": "Quick brown rabbits", "b…

検索時に複数のクエリでスコアを付ける その2

概要 前回と同じく、検索した時に「部分一致させたいけど、上位に出るのは前方一致してるものがいいなぁ」といった時の対応。 今回はcopy_toを使います。 元々の経緯としてはフィールド構造が異なる複数の対象に対してTopHitsクエリを用いていたのですが、何…

CuratorでElasticsearchのインデックスを削除

概要 Kibanaを使う上でデータ容量が問題になってきます。 可視化やログ調査に必要な分のみ残し、古いインデックスを定期的に削除する必要があります。 Curatorはそのためのツールです。 環境 Elasticsearch 2.2.0 Curator 3.4.1

Elasticsearch plugin 作成方法 [2.x]

概要 前回は1.x系のプラグインの作成方法を書きました。 今回は2.x系の作り方を勉強します。 完成形は以下 github.com 環境 Ubuntu 14.04 Elasticsearch 2.2.0 1.xとの違い 1.xはmaven、2.xはgradleでやるのが主流 2.xからAbstractPlugin => Pluginに変更 pl…

Elasticsearch plugin 作成方法 [1.x]

概要 Elasticsearchのプラグインの作成方法です。 1.xと2.xで色々と変更があるので、まずは1.xの作り方を学んでみます。 完成形は以下 github.com 環境 Ubuntu 14.04 Elasticsearch 1.4.5 プロジェクト作成 mavenからスケルトンコードを生成することができる…

Kibanaの運用で注意すること

概要 Kibanaをログ可視化&検索として扱う上でいくつかの問題が生じたので、その時の対処方法をまとめます。 ログ可視化という用途であればレスポンス速度などの優先度は下げられるため、以下の対応が可能になります。 環境 Ubuntu 14.04 Elasticsearch 2.1.…

NginxのアクセスログをKibanaで可視化

概要 Nginxのアクセスログを用いて可視化の流れをまとめます。 mappingは手動で設定します。 環境 Ubuntu 14.04 fluentd 0.12.19 fluent-plugin-elasticsearch 1.3.0 Nginx 1.4.6 Elasticsearch 2.1.1 Kibana 4.3.1 構成 IP 名前 役割 192.168.33.100 web We…

Elasticsearch2.1 × Kibana4.3 の導入

概要 可視化ツールとして有名なKibanaについてです。 Kibana 4.3 では Elasticsearch 2.x が必要なのでインストール方法をまとめました。 環境 Ubuntu 14.04 Elasticsearch 2.1.1 Kibana 4.3.1 Elasticsearch2.xのインストール ElasticSearch 2.x のインスト…

Elasticsearch 2.x のインストール

概要 メジャーバージョンアップでちょこちょこ変更点があるのでその対応を含めたインストール方法です。 環境 Ubuntu 14.04 Elasticsearch 2.1.0 Java 1.8.0_66 Java8のインストール $ sudo add-apt-repository ppa:webupd8team/java $ sudo apt-get update …

FilterとAggregationの組み合わせ

概要 Aggregationの結果にフィルタをかけたいと思ったら、使うクエリによって検索結果とAggsの結果が異なったのでそのまとめ。 環境 Ubuntu 14.04 Elasticsearch 1.6.0 簡単な区別 フィルタ 検索結果をフィルタする aggsの結果をフィルタする Filtered Query…

検索時に複数のクエリでスコアを付ける

概要 検索した時に「部分一致させたいけど、上位に出るのは前方一致してるものがいいなぁ」といった時の対応。 検索文字 デフォルト 希望 fa faterefactorfacebook fatefacebookrefactor 環境 Ubuntu 14.04 Elasticsearch 1.5.0

Elasticsearch の Aggregation 機能

Aggregationって? FacetsAPIの上位版です。集計する機能です。SQLならGROUP BYに相当します。 maxやavgといった複雑な条件で集約を行えます。 大谷さんの以下のスライドが非常にわかりやすいです。

Elasticsearch のクラスタを構築する

概要 Vagrant上にElasticsearchのクラスタを構築してfailoverを検証してみます。 環境 Ubuntu 14.04 Elasticsearch 1.4.4 Vagrant 1.7.2 以下の3台でクラスタを構築します。 ノード IP web1 192.168.33.10 web2 192.168.33.11 web3 192.168.33.12

MongoRiverを使う

概要 MongoDBのデータをElasticSearchに流し込むMongoDB River Pluginを扱います。 あるデータに対して検索機能を追加したいけど、MongoDBで全文検索はちょっと。。という時に便利です。 環境 Ubuntu 14.04 MongoDB 2.6.7 Java 1.8.0_31 ElasticSearch 1.4.2…

エイリアスを用いたマッピング変更

概要 仕様変更でフィールドの追加やマッピングの変更など発生しますが、Elasticsearch に関わらずほとんどの検索エンジンは検索・インデックス仕様の変更をする際、インデクスを再作成する必要があります。 エイリアスを利用すると、その変更をダウンタイム…

Elasticsearchのアナライザの設定

概要 Elasticsearchでアナライザを設定する方法です。 N-gramや形態素解析などありますが、今回は単に設定する方法だけを紹介します。設定方法は主に以下の3通りがあります。 configで設定する インデクス全体に設定する 各フィールド個別に設定する これら…

ElasticSearch のインストール

概要 簡単に全文検索を可能にしてくれるElasticSearchの実装です。 機能が多い分説明も増えるので少しずつ紹介していこうと思います。 環境 Ubuntu 14.04 ElasticSearch 1.7.2 Java 1.8.0_60