英文:
Fetch all unique scores from a stored set with Redis?
问题
添加地理数据使用以下代码:
jedis.geoadd("storegeodata", 51.5074, 0.1278, "London");
// 当成员字符串大多是 JSON 时
jedis.geoadd("storegeodata", 51.5074, 0.1278, "{place: London}");
jedis.geoadd("storegeodata", 51.5074, 0.1278, "{place: London, lat: 51.5074, lon: 0.1278}");
虽然地理哈希作为成员字符串是不同的,但如何检索唯一的基于地理哈希的值以避免冗余:
public Map<String, Object> checkRedisGeo(double lat, double lon, Jedis j) {
Map<String, Object> result = new HashMap<>();
try {
GeoRadiusParam param = GeoRadiusParam.geoRadiusParam();
param.sortAscending();
param.withDist();
param.count(1);
System.out.println("lat :" + lat + " , lon :" + lon);
List<GeoRadiusResponse> response = j.georadius("commander", lon, lat, 150, GeoUnit.M, param);
// System.out.println(response.size() + " size");
if (response.size() > 0) {
for (GeoRadiusResponse geoRadiusResponse : response) {
System.out.println("lat :" + lat + " , lon :" + lon + ", stringmember :" + geoRadiusResponse.getMemberByString());
// System.out.println(geoRadiusResponse.getDistance());
Object[] data = { geoRadiusResponse.getMemberByString() };
System.out.println(data);
result.put("result", data);
}
} else {
// sendEvents(streamEvent, null, streamEventChunk);
System.out.println("E");
}
} catch (Exception e) {
LOGGER.error("checkRedisGeo err : " + e);
}
return result;
}
该方法会检索结果,但如何基于地理哈希/分数值进行过滤,以获取所有不同的分数?
英文:
To add geo data following code is used
jedis.geoadd("storegeodata", 51.5074, 0.1278, "London");
//while member string is mostly json
jedis.geoadd("storegeodata", 51.5074, 0.1278, "{place: London}");
jedis.geoadd("storegeodata", 51.5074, 0.1278, "{place: London, lat: 51.5074, lon: 0.1278}");
While geohash is duplicated as member string is different , how to retrieve unique geohash based value avoiding redundancy
public Map<String, Object> checkRedisGeo(double lat, double lon, Jedis j) {
Map<String, Object> result = new HashMap<>();
try
{
GeoRadiusParam param = GeoRadiusParam.geoRadiusParam();
param.sortAscending();
param.withDist();
param.count(1);
System.out.println("lat :"+lat+" , lon :"+lon);
List<GeoRadiusResponse> response = j.georadius("commander",
lon,lat, 150, GeoUnit.M, param);
//System.out.println(response.size()+" size");
if(response.size() > 0)
{
for (GeoRadiusResponse geoRadiusResponse : response) {
System.out.println("lat :"+lat+" , lon :"+lon+", stringmember :"+geoRadiusResponse.getMemberByString());
//System.out.println(geoRadiusResponse.getDistance());
Object[] data= {geoRadiusResponse.getMemberByString()};
System.out.println(data);
result.put("result", data);
}
}else {
// sendEvents(streamEvent, null, streamEventChunk);
System.out.println("E");
}
} catch (Exception e) {
LOGGER.error("checkRedisGeo err : "+e);
}
return result;
}
Which retrieves result but how to filter out based on geohash / score value ,how to get all distinct score ?
答案1
得分: 1
能够通过比较分数获得重复和唯一分数,因为分数是唯一的,相同分数存储了多个成员,以下是相应的代码:
Double previous_score = 0.0;
int DuplincatesCount = 0;
int UniqueCount = 0;
Set<String> values = jedis.zrange("rediskey", 0, -1); // 获取所有成员
for (String member : values) {
Double current_score = jedis.zscore("rediskey", member); // 每个成员循环
if (Double.compare(current_score, previous_score) == 0) { // 将当前分数与前一个分数进行比较
DuplincatesCount++;
} else {
UniqueCount++;
}
previous_score = current_score; // 分数映射
}
System.out.println("重复条目 " + DuplincatesCount);
System.out.println("唯一条目 " + UniqueCount);
英文:
Was able to get duplicates and unique scores by comparing the score as the score is unique
and multiple members are stored for same score following was the code for the same
Double previous_score = 0.0;
int DuplincatesCount = 0;
int UniqueCount = 0;
Set<String> values = jedis.zrange("rediskey", 0, -1);// get all the members
for (String member : values) {
Double current_score = jedis.zscore("rediskey", member);//each member looped
if (Double.compare(current_score, previous_score) == 0) { //comparing current score with previous
// score
DuplincatesCount++;
} else {
UniqueCount++;
}
previous_score = current_score;// score mapping
}
System.out.println("Duplincates entry " + DuplincatesCount);
System.out.println("Unique entry " + UniqueCount);
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论