Hazelcast - 查询Map值的集合

时间:2015-09-29 19:04:35

标签: hazelcast distributed-cache hazelcast-imap

假设我在IMap中有以下值:

public class Employee{
  public int empId;
  public List<String> categories;

  public List<String> getCategories(){
    return this.categories;
  }
}

我想找到属于“销售”类别的所有员工。另外,我想在getCategories()上创建一个索引,以便查询快速返回。似乎没有可用的谓词。我该如何实现这一目标?看起来我必须写一个Predicate来做这件事。是否有我可以看到的示例代码,它将向我展示如何构建使用索引的谓词?

2 个答案:

答案 0 :(得分:1)

我目前看到这种情况的唯一方法是对数据模型进行非规范化,并使用像IMap和以下内容作为值:

class EmployeeCategory {int employeeId,String category}

并在类别上添加索引。

积压的某个地方提供了更多的预付款指数,应该能够开箱即用。

答案 1 :(得分:0)

我尝试通过将List迭代到单独的Imap,然后在客户端中对其进行查询。

IMap<String,ArrayList< categories >> cache=hazelcastInstance.getMap("cache");                   
        IMap<String, categories> cachemodified = hazelcastInstance.getMap("cachemodified") ;        
        int[] idx = { 0 };
        xref.get("urkey").forEach(cachefelement ->{
            cachemodified.put(String.valueOf(idx[0]++),cachefelement);
        });
        Predicate p = Predicates.equal("categoryId", "SearchValue");
        Collection<categories> result = cachemodified.values(p);