【问题标题】:Searching in List properties在列表属性中搜索
【发布时间】:2014-03-21 15:09:52
【问题描述】:

我有一个名为“Profile”的实体,它有一个名为“keySkills”的 List 类型的属性。

如果 'keySkills' 具有 [Java,C,C++,WEB TECHNOLOGIES] 之类的值,我该如何搜索实体 当搜索条件只是 WEB 时?以下查询过滤器不起作用,因为输入“WEB”与列表中的值“WEB TECHNOLOGIES”不匹配。

       ArrayList criteria=new ArrayList();
       criteria.add("WEB");
       q.addFilter("keySkills",FilterOperator.IN, criteria);

谢谢 马

【问题讨论】:

    标签: google-app-engine google-cloud-datastore


    【解决方案1】:

    首先,您不能使用 ArrayList 作为搜索参数。应该是:

     q.addFilter("keySkills",FilterOperator.IN, "WEB");
    

    其次,您无法使用 IN 运算符执行您所描述的操作。它必须完全匹配一个值,否则它将不返回任何结果。

    您可以使用Search API 进行此类搜索。

    【讨论】:

    • 我至少可以传递一个 List 类型的对象 List findSkills = Arrays.asList("Java","WEB");如果列表只有 WEB 作为值,它就可以工作。哪个搜索 API 可以请您指向正确的链接..
    • 嗨,Andrei,我的应用程序是一个招聘门户网站,招聘人员将根据一些关键词搜索候选人。这是我需要模式匹配功能的用例。创建文档和索引对我来说意味着更多的托管成本。我的应用程序仍处于开发阶段,我计划转移到 Red Hat OpenShift (Jboss + MySQL) 平台。你有什么建议?
    • 可能我必须获取所有实体并执行 java 字符串搜索以进行模式匹配。如果我要获取所有我相信的实体,则必须构建一些内存缓存......
    【解决方案2】:

    您可以使用正常的相等运算符来检查与多值字段中单个值的匹配。

    【讨论】:

    • 他想要部分匹配。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-05
    • 1970-01-01
    • 1970-01-01
    • 2013-11-28
    • 1970-01-01
    相关资源
    最近更新 更多