我正在尝试通过 QueryBuilder/Query 在节点中搜索,但它似乎无法正常工作。我有以下代码方法来搜索大约 6000 条记录。
public String searchRows(String search, int start, int length){
Map<String, String> searchMap = new HashMap<String, String>();
searchMap.put("path", this.path);
searchMap.put("fulltext", search);
Query query = this.builder.createQuery(PredicateGroup.create(searchMap), this.session);
query.setStart(start);
query.setHitsPerPage(length);
SearchResult result = query.getResult();
//return result.getQueryStatement();
StringBuilder sb = this.createBasicInfo(result.getTotalMatches());
sb.append(this.toaaData(result));
sb.append("}");
return sb.toString();
}
我想得到部分匹配的结果。例如,我有具有这些属性的节点
Company "My Drugstore Abc"
City "My City"
Street "Some Street"
如果我尝试搜索“Abc”,我会得到正确的结果,但如果我尝试搜索“药店”或“我的”,我什么也得不到。另外,如果我尝试搜索“城市”或“街道”,我什么也得不到……我该如何解决这个问题?我试图像这样编辑搜索词
searchMap.put("fulltext", "*"+search+"*");
和这个
searchMap.put("fulltext", "%"+search+"%");
但它仍然没有按我需要的方式工作......
这是我从 result.getQueryStatement() 得到的 Xpath;
/jcr:root/my/path//*[jcr:contains(., 'city')]
谢谢你的帮助
编辑:我发现这个
searchMap.put("fulltext", "*"+search+"*");
基本上按照我需要的方式工作,但是速度太慢了,结果可能会以错误的顺序返回。没有星号的查询需要 2-80 毫秒,但如果有星号则需要 1-6 秒。我该如何解决这个问题?