web-dev-qa-db-ja.com

トップヒットスコアによるElasticsearchの集計順序

Top_hitのdoc.scoreでバケットを注文したい。私の現在の実装は以下のとおりです。

  group_by_iid: {
    terms: {
      field: 'iid',
      order: { max_score: 'desc' },
      size: 0
    },
    aggs: {
      max_score: { max: { script: 'doc.score' } },
      top_hit: {
        top_hits: {
          sort: [{ source_priority: { order: 'desc' } }],
          size: 1
        }
      }
    }
  }

バケットは、source_priorityドキュメントの最高スコアではなく、最高スコアで並べ替えられるため、これは誤りです。この問題を解決する方法はありますか?

13
pandora2000

同じ問題が発生しました。解決方法は、ドキュメントスコアにサブアグリゲーションを導入することでした。次に、外部アグリゲーションで、max_scoreアグリゲーションの名前で並べ替えました。

GET /my-index/my-type/_search
{
  "query": {
      "bool" : {
        "should" : [ {
          "match" : {
            "searchTerm" : {
              "query" : "style",
              "type" : "boolean"
            }
          }
        }, 
        {
          "flt_field" : {
            "searchTerm" : {
              "like_text" : "style"
            }
          }
        }]
      }
    },
    "aggs": {
        "group_by_target_url": {
          "terms": {
            "field": "targetUrl",
            "order": {
              "max_score": "desc"
            }
          },
          "aggs": {
            "max_score": {
              "max": {
                "script": "doc.score"
              }
            }
          }
    }
  }    
}

私はこのリンクの指示に従いました:

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html

18
Roy Kachouh