2

エラスティックサーチ初心者。これはかなり単純であるべきだと思いますが、ここで立ち往生しています。次のような Posts のマッピングがあります。

[ post1: {
   title: 'asdfasd',
   comments: [commment1, comment2, comment3]
},
post2: {
   title: 'asdf',
   comments: [comment1, comment2]
}
.
.
.]

そして、タイトルで検索して、コメントの数で並べ替えようとしています。タイトルで問題なく検索できますが、コメント数で結果を並べ替える方法について少し混乱しています。これを行うための最良の方法は何ですか?

4

1 に答える 1

13

2 つのオプションがあります -

  1. スクリプトを使用して配列の長さを取得します。したがって、次のようにします。

    {  
      "query" : {  
        ....  
      },  
      "sort" : {  
        "_script" : {  
          "script" : "doc['comments'].values.length",  
          "type" : "number",  
          "order" : "desc"  
        }  
      }  
    }
    
  2. コメント数用の追加フィールドを保持します。コメントを追加するたびに、コメント カウンターの値もインクリメントし、それによって並べ替えます。

大量のデータがある場合は、オプション #2 をお勧めします。スクリプトを使用するとオーバーヘッドが発生し、ドキュメントの大規模なコレクションに対してスクリプトを計算する必要がある場合は、検索時間が長くなる可能性があります。一方、フィールドによる並べ替えは、パフォーマンスの点ではるかに優れています。私は#2で行きます。

于 2013-10-26T19:16:26.723 に答える