ページ

ラベル Elasticsearch の投稿を表示しています。 すべての投稿を表示
ラベル Elasticsearch の投稿を表示しています。 すべての投稿を表示

2016/12/31

ElasticsearchのBouncing Results問題

|

Boucing Resultsという問題がある。検索結果に重複・欠落が起きる問題。

ソートのキーに使われる項目の値が同じdocumentがあると、検索結果の順序が一定にならない可能性がある。
Elasticsearchのクエリでページネーションを行う場合、各ページへのリクエストは独立しているので、それぞれのアクセスで別のシャードにアクセスする可能性がある。

  • 対象のElasticsearchクラスタがレプリカを持っている
  • ソート対象項目の値が同一の複数documentがページを跨っている
  • それらのページへのリクエストが別のシャードに割り当てられる
  • それぞれのシャードが対象のdocumentを返す順番が異なる

といった条件が揃うと、1ページ目で返された検索結果が次のページでも返ってくる、という事象が起きる。

これは、Elasticsearch: The Definitive Guide でも説明されている Bouncing Results という問題とのこと。

この問題と思われる事象に遭遇したため、事象の再現と対策の検証を行なった。

Spring Data Elasticsearchが実行するクエリを確認する

|

Spring Data ElasticsearchのElasticsearchTemplateなどを使って
最終的に実行されたクエリを確認するには以下を application.yml に設定すれば良い。

spring:
    data:
        elasticsearch:
            properties:
                index:
                    search:
                        slowlog:
                            threshold:
                                query:
                                    info: "0s"

Spring Data ElasticsearchのローカルのノードにHTTPでアクセスする

|

忘れがちなのでメモ。
Spring Data ElasticsearchのローカルのノードにHTTPでアクセスするには、application.yml に以下を追加すればいい。

spring:
    data:
        elasticsearch:
            properties:
                http:
                    enabled: true

http://localhost:9200/ でアクセスできる。

2016/09/26

Spring Boot CLIでElasticsearchにアクセスするクライアントを作る

|

Elasticsearchのデータ操作をサーバ上で行いたい場合に、curlでアクセすれば良いが、ちょっと複雑なことをやろうとするとシェルスクリプトでは面倒だったりする。

で、こういうちょっとしたスクリプトを実装するのはSpringではやはり難しいだろうか?と調べてみたら Spring Boot CLI がちょうど良さそうだったので試してみた。

今回は jq を使うことで結局シェルスクリプトでも何とかなるレベルのものにとどまってしまったが、あれこれ試した結果をまとめておく。