我試圖在通過的QueryBuilder /查詢節點進行搜索,但它似乎並沒有很好地工作。我有以下代碼方法來搜索約6000條記錄。CQ5得到部分正確結果
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+"%");
,但它仍然沒有奏效,我需要的方式......
這是XPath我從result.getQueryStatement()獲取;
/jcr:root/my/path//*[jcr:contains(., 'city')]
感謝所有幫助
編輯:我發現這個
searchMap.put("fulltext", "*"+search+"*");
作品基本上我需要的方式,但它是如此之慢,結果可能會回來的壞命令。查詢需要2-80毫秒而沒有星號,但是它們需要1-6秒。我該如何解決這個問題?
謝謝你的答案,但我怎麼能更改使用的HashMap /的QueryBuilder中的XPath?我試過這個searchMap.put(「type」,「myType」);和這個searchMap.put(「property」,「myProp」);但它不起作用... – Jakolcz
將諸如jcr:contains(...)之類的語句放入querybuilders謂詞映射中將不起作用。 恐怕只是優化了XPath查詢,你不會使用xpath語句創建查詢。 – Thomas
我該怎麼做?我試圖尋找它,但我發現的唯一的事情是創建通過的QueryBuilder和謂語地圖不僅僅是XPath語句... – Jakolcz