2017-03-02 8 views
0

src,txtおよびfltフィールドのドキュメントがあります。私は、次のようにtxtフィールドで照会したい:srcによってスクリプトの順序付けでtop_hitsフィールドを使用した弾性検索集約

  1. グループ(bucketize)。
  2. 各バケットで最も関連性の高いトップ1の文書を計算します。
  3. 各バケットを_score * doc.flt値で注文します。

これまでのところ私は1と2を実装していましたが、3は実装しませんでした。3があまり効率的でないかもしれませんが、私はまだそのようなオプションが必要です。私のクエリは次のようになります。

{ 
    "query" : { 
     'match' : { 
      'text' : { 
       'query' : <some text>, 
       'fuzziness' : 'AUTO', 
       'operator' : 'and' 
      } 
     } 
    }, 
    "aggs": { 
     "by_src": { 
      "terms": { 
       "field": "src", 
       "size" : 10, 
       "order" : {"top_score" : "desc"} 
      }, 
      "aggs": { 
       "top_hits" : { 
        "top_hits" : { 
         "sort": { "_score": { "order": "desc" } }, 
         "size" : 1 
        } 
       }, 
       "top_score": { 
        "max" : { 
         "script" : "_score", 
        } 
       } 
      } 
     } 
    } 
} 

答えて

0

私はあなただけのフィールド名でソートを適用し、各バケットに並べ替えを適用する_sourceフィールドを使用する必要はありませんので、それは失敗だと信じて:

{ 
    "query" : { 
    'match' : { 
     'text' : { 
      'query' : <some text>, 
      'fuzziness' : 'AUTO', 
      'operator' : 'and' 
     } 
    } 
}, 
"aggs": { 
    "by_src": { 
     "terms": { 
      "field": "src", 
      "size" : 10, 
      "order" : {"top_score" : "desc"} 
     }, 
     "aggs": { 
      "top_hits" : { 
       "top_hits" : { 
        "sort":[{ 
         "flt": {"order": "desc"} 
        }], 
        "size" : 1 
       } 
      }, 
      "top_score": { 
       "max" : { 
        "script" : "_score", 
       } 
      } 
     } 
    } 
    } 
} 

文書には、並べ替えに使用するfltというフィールドがあると仮定しています。もちろん、それが必要な場合は、ソートをascに変更することもできます。

+0

返信いただきありがとうございますが、私はそれを取得しません。私の問題は、私が提供するクエリは、最初に、各バケット内のスコアでソートし、トップ1、2番目を取って、トップ1のスコアで各バケットを注文するということです。私がしたいのは、バケットをトップスコアトップスコアにトップヒットの値を掛けたもの、つまり "_score * doc.flt"、またはもっと複雑な関数でそれらを並べ替えます。 – Tzoiker

+0

さて、私はこれをやったことはありませんが、スクリプトを調べるべきだと思います。https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting-fields.html –

+0

うん、私は試しましたが、これまでのところ成功はありません。私は非常に同じ解決されていない問題(抽出とtop_hitフィールドを使用して)ここで別のスレッドを発見しましたhttps://github.com/elastic/elasticsearch/issues/17355 – Tzoiker

関連する問題