alphazero / jredis

Java Client and Connectors for Redis
http://code.google.com/p/jredis/
Apache License 2.0
315 stars 136 forks source link

jreids ZINTERSTORE , ZUNIONSTORE wrong result #56

Closed sarowlwp closed 12 years ago

sarowlwp commented 12 years ago

zinterstore can set up weight params , but when i set { 2 , 3 } as weights for two zset ,it return wrong result

REDIS OFFICE Examples redis> ZADD zset1 1 "one" (integer) 1redis> ZADD zset1 2 "two" (integer) 1redis> ZADD zset2 1 "one" (integer) 1redis> ZADD zset2 2 "two" (integer) 1redis> ZADD zset2 3 "three" (integer) 1redis> ZUNIONSTORE out 2 zset1 zset2 WEIGHTS 2 3 (integer) 3redis> ZRANGE out 0 -1 WITHSCORES 1) "one" 2) "5" 3) "three" 4) "9" 5) "two" 6) "10"

mytestcode:

public void testJREDIS() { Jedis ir = new Jedis("192.168.105.218"); ir.del("testZUNIONSTORE1"); ir.del("testZUNIONSTORE2"); ir.del("testZUNIONSTOREout");

    ir.zadd("testZUNIONSTORE1", 1, "ONE");
    ir.zadd("testZUNIONSTORE1", 2, "TWO");
    ir.zadd("testZUNIONSTORE2", 2, "ONE");
    ir.zadd("testZUNIONSTORE2", 4, "TWO");
    String[] keys = new String[2];
    keys[1] = "testZUNIONSTORE1";
    keys[0] = "testZUNIONSTORE2";

    ZParams Op_params = new ZParams();
    Op_params.aggregate(ZParams.Aggregate.SUM);
    Op_params.weights(new int[]{2,3});
    ir.zunionstore("testZUNIONSTOREout", Op_params, keys);

    Map <String ,Double> scores1 = new LinkedHashMap<String,Double>();
    scores1.put("ONE", 8.0 = 1*2 + 2*3);    //jredis return 7 = 1*3 + 2*2
    scores1.put("TWO", 16.0 = 2*2 + 4*3); //jredis return 14 = 2*3 + 4*2

    assertEquals(scores1,ir.zrangeWithScores("testZUNIONSTOREout", 0, -1));
    ir.del("testZUNIONSTORE1");
    ir.del("testZUNIONSTORE2");
    ir.del("testZUNIONSTOREout");

}
sarowlwp commented 12 years ago

可以用中文吗

alphazero commented 12 years ago

可以 文吗 Farsi ;)