在ES中如果需要实现聚合排序的功能是相比通过sql语句实现要复杂一些的,以一个基础的例子来讲:
1 | select a.column_1, a.column_2, a.total from ( |
以上述sql为例子,需要通过2个字段的分组,然后获取分组的总数并且按倒序排序,取最大的总数最大的10条数据。
xxxxxxxxxx function test(){ var defer = $.Deferred(); var urlStr = “postcommit.html?I_SOURCE=getxliff”; $.ajax({ url : urlStr, success: function(data){ defer.resolve(data); } }); return defer.promise();}var result = $.when(test()).done(function(dataStr){ alert(dataStr);});javascript
1 | { |
这里面需要注意的一个参数是shard_size。
因为ES是采用的分片的模式存储数据的,当执行查询操作时查询语句会进入每个分片中根据条件查询最大的10条数据,根据查询结果再组装成最后返回给客户端的数据。这样每个分片中的最大的10条数据汇聚出来数据不一定是客户端想要的结果,导致最后的数据出现误差,通过设置show_term_doc_count_error参数为true,可以看到聚合结果返回的误差值,如果为0表示没有误差否则存在误差数据。
因此这里设置参数shard_size表示查询每个分片的数据条数,在每个分片中取的足够多的数据后再组装成最后需要的结果数据。这个参数设置的越大数据会更加精准,同时查询效率也会相应的降低,根据实际情况调整这个参数值。