Aem 使用querybuilder在CQ5中进行不区分大小写的搜索
请建议如何在CQ5中使用querybuilder实现不区分大小写的搜索。我的代码如下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
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属性
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");