UGA Boxxx

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

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

Elasticsearchに保存するデータは、日次でつくったIndexに保存している

このような運用はElasticsearchのデータ保存法として一般的

fintan.jp

上記サイトより

日次でインデックスを分割するのはElasticが推奨する方法です。性能のコントロールが容易になり、また古いログを削除する場合、インデックス自体を削除すればよいため、クリーニングの運用が容易になります。

そして、例えばこのようなindexがあり、

my-index-20200601
my-index-20200602
my-index-20200603

これらをまとめて取得する場合は、以下のようにアスタリスクでまとめることができる

GET my-index-*/item/_search
{
  "query": {
    "match_all": {} 
  }
}

まとめるときのソート順

indexの日付順にしたくて試しにsort_indexを指定してみたらindexの日付順にすることができた

GET my-index-*/item/_search
{
  "query": {
    "match_all": {} 
  },
   "sort": [
    {
      "_index": {
        "order": "dec"
      }
    }
  ]
}

しかし、boostを使ってスコアを調整している場合はソートが使えなかった(_scoreがnullになってしまう)

boost は条件にマッチした場合にscoreを加算する機能

この場合は、function_scoreを使わず、scripted fieldsを使って調整したスコアのフィールドを作るのがよさそう