Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Aem 使用querybuilder在CQ5中进行不区分大小写的搜索_Aem_Predicate_Query Builder_Jcr - Fatal编程技术网

Aem 使用querybuilder在CQ5中进行不区分大小写的搜索

Aem 使用querybuilder在CQ5中进行不区分大小写的搜索,aem,predicate,query-builder,jcr,Aem,Predicate,Query Builder,Jcr,请建议如何在CQ5中使用querybuilder实现不区分大小写的搜索。我的代码如下 paramMap.put("1_property", searchType); paramMap.put("1_property.value", "%" + searchString + "%"); paramMap.put("1_property.operation", "like"); paramMap.put("2_property", "documentId"); paramMap.put("2_pro

请建议如何在CQ5中使用querybuilder实现不区分大小写的搜索。我的代码如下

paramMap.put("1_property", searchType);
paramMap.put("1_property.value", "%" + searchString + "%");
paramMap.put("1_property.operation", "like");
paramMap.put("2_property", "documentId");
paramMap.put("2_property.operation", "exists");
paramMap.put("3_orderby.sort", "asc");
paramMap.put("p.limit", "0");
searchType是节点属性 searchString是需要匹配的字符串

目前,它进行区分大小写的搜索。我尝试了这里提到的解决方案
它不起作用。

我遇到了同样的问题,并找到了使用QueryBuilder进行不区分大小写搜索的3种可能的解决方案:

  • 您上面提到的自定义查询谓词。

  • 全文谓词。
    缺点:它很贪婪,会找到所有%your\u search\u query%匹配项。
    详情如下:

  • 节点名谓词。
    这是一种变通方法,仅当您搜索jcr:title属性时才有效,因为在大多数情况下,nodename=小写且转义的jcr:title
    因此,您可以搜索nodename而不是jcr:title属性

  • 第三种方法对我很好。

    使用AEM 6.2(我认为6.1的FP)querybuilder现在支持通过
    orderby.case=ignore
    @alex进行不区分大小写的排序 order.case用于排序结果

    @伊格纳特和大卫 第四个选项使用Xpath:)


    唯一适合我的解决方案是自定义谓词

    @Component(factory = "com.day.cq.search.eval.PredicateEvaluator/caseinsensitive")
    public class CaseInsensitivePredicate extends AbstractPredicateEvaluator {
    
    
        @Override
        public String getXPathExpression(Predicate predicate, EvaluationContext context) {
            String property = predicate.get("caseinsensitive");
            String propertyValue = predicate.get("value");
            String operation = predicate.get("operation");
    
            String result;
            if ("like".equals(operation)) {
                result = "jcr:like(fn:lower-case(@" + property + "), '%" + propertyValue.toLowerCase() + "%')";
            } else {
                result = "fn:lower-case(@" + property + ") = '" + propertyValue.toLowerCase() + "'";
            }
            return result;
        }
    }
    
    对于QueryBuilder地图,您可以这样使用它:

    map.put("1_caseinsensitive", "propertyName");
    map.put("1_caseinsensitive.value", "searchString");
    map.put("1_caseinsensitive.operation", "like");
    

    这个问题与XPath有什么关系?您是否尝试过CQ的查询调试器工具中链接中提到的解决方案?请转到。有关如何使用它的参考信息,请参见此。试试看,直到你得到确切的答案。干杯。@yashahuja Yep,尝试使用自定义谓词,不起作用,不知道我遗漏了什么您可以通过Lucene索引启用不区分大小写的搜索-参考更多详细信息博客的新链接Yep,我在这里记录了更多选项
    map.put("1_caseinsensitive", "propertyName");
    map.put("1_caseinsensitive.value", "searchString");
    map.put("1_caseinsensitive.operation", "like");