UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

Elasticsearch

【Elasticsearch】Reindexを止めたい

Reindex実行後、Reindexのスクリプトが間違っていたことに気づいたので止めたい まずはReindexのタスクIDを確認する 確認方法は以下 【Elasticsearch】Reindexの進捗が知りたい - UGA Boxxx タスクIDがわかったら以下のコマンドを実行するだけ POST _tasks/…

【Elasticsearch】複数indexがひもづくaliasへの更新はできない

複数のindexをまとめてaliasを定義している この時、一斉にこの複数のindexに対して更新をかけたい時に、aliasを指定すれば更新できるのかと考えたが以下のエラーが出てできなかった index [my-index-alias], type [_doc], id [12345], message [Elasticsear…

【Elasticsearch】価格の近い順にソートする

Elasticsearchでドキュメントを指定した価格に近い順にソートしたい 昇順でも降順でもないので、これは_scriptセクションを使用してカスタムソートを定義するしかなさそう ロジックは各ドキュメントの価格と目標価格(params.target_price)との絶対値差を計…

【Elasticsearch】3台構成にしたローカルのES dockerコンテナが起動しない

ローカルのdockerで3台のElasticsearchのクラスターを構成したい 必要な設定をdocker-compose.ymlに書いて起動したところ2つのノードで以下のエラーが発生した elasticsearch ERROR: Elasticsearch exited unexpectedly, with exit code 137 エラーコード13…

【Elasticsearch】ProfileAPIの結果をKibanaで可視化する

Elasticsearchの検索で異様に遅いクエリがあった このクエリのProfileがみたいと思っていたところ、以下の記事をみつけたのでKibanaで可視化してみる dev.classmethod.jp localhost:9200でアクセスできるESにdocker上のKibanaからアクセスする方法は以前に記…

【Elasticsearch】null_valueの設定をしていないフィールドがnullのものを検索したい

Elasticsearchのあるフィールドがnullであるものを検索したい つらいのが、そのフィールドにnull_valueを設定していないため、"NULL"という文字列で検索ができない null_value | Elasticsearch Guide [8.5] | Elastic そこで思いついたのが、existsを使う方…

【Elasticsearch】Trying to create too many scroll contexts.のエラーがでてスクロール検索できない

Elasticsearchでスクロール検索をしようと思ったが、以下のエラーがでてできなかった Trying to create too many scroll contexts. Must be less than or equal to: [500]. This limit can be set by changing the [search.max_open_scroll_context] setting…

【Elasticsearch】近い順にソートしたい

Elasticsearchである地点から距離が近い順にソートしたい 調べると Geo Distance Sorting というのでできるみたい www.elastic.co 以下のようなクエリになる GET /_search { "sort" : [ { "_geo_distance" : { "pin.location" : [-70, 40], "order" : "asc",…

【Elasticsearch】NODE_LEFTが消えない

GCE上にESインスタンスを3つつくってNode3台のクラスター構成にしている これがあるときストレージがいっぱいになったことで一つのNodeがNODE_LEFTのステータスになってしまった $ curl -XGET host:9200/_cat/shards?h=index,shard,prirep,state,unassigned…

【Elasticsearch】Aggregateしたものの中で条件にマッチしたものだけでsumしたい

ElasticsearchのAggregationで集約するときに、ある条件にマッチしたドキュメント(レコード)だけでsumしたい 例えば、物件ドキュメントが以下のような物件タイプというフィールドを持っている場合 物件タイプ: アパート、マンション、一軒家、ホテル、コン…

【Elasticsearch】Reindexの進捗が知りたい

Reindex実行後、Reindexが終わったのかどうかがわかないので進捗が知りたい 下のドキュメントによると_tasks/で確認することができる www.elastic.co 基本的には_tasks/で実行中のタスク一覧を確認すればよさそう { "nodes": { ... "bgQV-2YaTymKCzT4bI29dg"…

【Elasticsearch】Reindexのscriptで文字列の加工

Elasticsearchで以下のようなフィールドがある id: 00000001:ja この値をコロン「:」でスプリットした時の最後の要素は言語コード(jaは日本語)を示しているのだが、これを変更してマレーシ語を意味する以下のようなデータをつくりたい id: 00000001:ms 案…

【Elasticsearch】重みをつけて検索

Elasticsearchにあるデータで、あるフィールドに重みをつけて検索したい そして、単に重み付けだけでなく条件式を書いて条件にマッチしたフィールドだけに重み付けしたい まずは重み付け検索について www.elastic.co script_scoreを利用する GET /_search { …

【Elasticsearch】Multi-match queryのtype

以前、ElasticsearchのMulti-match queryを使ってみた uga-box.hatenablog.com これの用途として、例えば"東京"のつもりで「to」と入力された時に、完全一致が一番スコアが高く、前方一致するものがアナライザーに即して順次ぶら下げたいというときに このよ…

【Elasticsearch】restore時に正規表現をつかってrenameする

Elasticsearchのindexをrestoreする場合に正規表現を使えるのは知っているが、数字を扱う場合\dが使えるのか[0-9]の方がよいのかわからなかったので調べた 例えば、Elasticsearchのindexをバージョニングしている場合で、例えば以下のようなindexが存在して…

【Elasticsearch】ES6からES7へマイグレーションでindexからtypeがなくなる

ES6からES7へマイグレーションしていて ES6のときからライトに使用していたので、アプリケーションの修正点は少なかったが、まとめておく typeがindexがなくなる www.elastic.co template作成時に以下のようにmappingsの下にitemというtypeを作っていたが、E…

【Postman】PostmanからElasticsearchのmulti searchクエリを実行する

Elasticsearchのmulti serachクエリはちょっと特殊でESのdevtoolで実行する場合は GET my-index/_msearch {"index":"accounts"} {"query":{"bool":{"should":[{"match":{"owner.first_name":"Creeple"}}]}}} このように2つのオブジェクトを改行して並べる必…

【Elasticsearch】日付ごとの集計値を出す

あるアプリの処理実行時間をstartDateTimeフィールドに格納している このstartDateTimeフィールドを使って日付毎の集計値を出したい Date histogram aggregationedit を使う www.elastic.co { "size": 0, "aggs": { "histogram_daily": { "date_histogram": …

【Elasticsearch】ES7でhitsが10,000 になる

ES7にアップグレードした環境にES6でつくったデータをrestoreして、totalのdoc数を確認したところtotal_hitsが10,000件になっていた snapshot中の問題なのか、restore中の問題なのか、ES7へのアップグレードが問題なのかわからなかったのだが ES7からデフォ…

【Elasticsearch】Multi-match queryを使ってみる

Elasticsearchをつかった検索で、複数のフィールドを検索対象とするクエリを発行したい、かつ、完全一致する場合はそのdocを通常の2倍のスコアにしたい このとき、ESのMulti-matchクエリを使うことを検討してみた www.elastic.co 基本的な使い方 this is a t…

【Elasticsearch】同じdocのはずがscoreが違う謎

同じdocのはずがscoreが違う謎の事象と遭遇した 具体的には tweetインデックスに以下のdocが入っている id user message likes 1 Aさん elasticsearch 14 2 Bさん elasticsearch 10 3 Cさん elasticsearch 12 4 Aさん elasticsearch 10 5 Bさん elasticsearc…

【Elasticsearch】Javaでgeo_distanceクエリを使う

ESのgeo_distanceクエリで、ある指定した中心からの距離で検索かけたい GET /my_locations/_search { "query": { "bool" : { "must" : { "match_all" : {} }, "filter" : { "geo_distance" : { "distance" : "200km", "location" : { "lat" : 40, "lon" : -7…

【Elasticsearch】termsに指定できる上限

termsで複数のキーワードを指定したさいに以下のエラーが発生した { "error": { "root_cause": [ { "type": "too_many_clauses", "reason": "too_many_clauses: maxClauseCount is set to 1024" } ], "type": "search_phase_execution_exception", "reason":…

【Elasticsearch】Filed Collapsing と Scroll API は併用できない

以前、Filed Collapsingについて調べたが、これの検索結果をScroll APIをつかって取得したい uga-box.hatenablog.com が、結論できないみたい https://www.elastic.co/guide/en/elasticsearch/reference/current/collapse-search-results.html

【Elasticsearch】cardinalityを使ってaggregationの結果の重複をなくす

aggregationを使って集約した結果に重複がありそうだったので、この重複をなくしたい 重複を削除して集計する場合はcardinalityを使う www.elastic.co GET /language/_search?size=0 { "aggs": { "lang": { "terms": { "field": "language", "size": 10 }, "…

【Elasticsearch】scripted fields を設けると _sourceが表示されない

ESのscripted fieldsを使って、計算した結果の一つをフィールドとして定義した際、出力結果をみるとscripted fields以外の_sourceが表示されなかった GET my-index/item/_search { "script_fields": { "my_doubled_field": { "script": { "lang": "expressio…

【Elasticsearch】Snapshot操作

ElasticsearchでSnapshotのキャンセルの仕方を毎回忘れるのでAPIをまとめてとく GCSにSnapshotをあげる 滅多にやらないので忘れがち 導入のしかたは以下 GCPでElasticsearchのGCS Repository Pluginがインストールされたカスタムイメージを作ってみる - Day-…

【Elasticsearch】Indexをまとめるときのソート順

Elasticsearchに保存するデータは、日次でつくったIndexに保存している このような運用はElasticsearchのデータ保存法として一般的 fintan.jp 上記サイトより 日次でインデックスを分割するのはElasticが推奨する方法です。性能のコントロールが容易になり、…

【Elasticsearch】データ更新中にindexがREDになった

ESのデータ更新中に急にindexのstatusがREDになってしまった 理由をみてみるとプライマリーもレプリカもALLOCATION_FAILEDになっている curl -XGET "localhost:9200/_cat/shards?h=index,shard,prirep,state,unassigned.reason,node" これまではrestore後にU…

【Elasticsearch】配列のフィールドから指定した要素数だけ取得する方法

結論、あまりよいやり方に思えないが、とりあえずやりたいことはできたので書き残しておく 概要 ElasticSearchの一つのドキュメントの中に画像URLが複数格納された配列のフィールドがあったとする ... images: [ "http://some-site/path/to/image/aaaaa.png,…