ES的使用折疊實現分組去重


  最近用到使用es按指定字段對數據去重,之前沒怎么用過es,網上找es分組的資料。發現較多資料提到es的聚合查詢,效果類似mysql的 select uid, count(uid) from table group by uid。

 

  但這不是我想要的效果,mysql的按組查詢各組最新的一條數據。

 上谷歌找到博文:https://www.jianshu.com/p/ce47af084cf7

         https://blog.csdn.net/ctwy291314/article/details/82759215

  按着改了查詢條件:

$params['collapse'] = [
                    "field"=> "uid",              //要進行折疊的字段
                    // "inner_hits" => [             //折疊的參數集
                    //     "name"=> "hits",          //折疊的name,目前沒有發現哪里有用到的地方,可能在多個折疊情況下有用
                        // "ignore_unmapped"=> true,  //默認為false,如果存在一些數據沒有折疊字段的會報錯,設置為true可以避免類似的報錯

                        //from和size用來控制想要返回的折疊列表,這里我的需求是重復id相同僅返回頭條,所以兩個參數均設置為0
                        //如果有需求折疊列表的可以通過這里控制
                        // "from"=> 0,
                        // "size"=> 10,
                        // "version"=> false,
                        // "explain"=> false,
                        // "track_scores"=> true,
                        // "sort" => [],
                    // ]
            ];

打印查詢結果可見數據已經按uid去重,如果要拿到折疊數據,將取消注釋的代碼再次提交即可,如果折疊內容需要增加排序,將排序規則加入collapse的sort即可。

     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM