注:skip和limit還可以做分頁查詢
public KgSearchResult getAutoQueryResultByKeyword(String sourceNodeId,String keyWord,Integer pageNo, Integer pageSize,boolean absolute) throws Exception {
KgSearchResult kgSearchResult = new KgSearchResult();
Integer skipNum = (pageNo-1)*pageSize;
//首先精確查詢節點,如只有一個,查詢返回;多個查詢後合併
String querySql = " match (sourceNode) where sourceNode.name ={objName} return sourceNode skip "+skipNum+" limit " +pageSize;
Map<String, Object> paraMap = new HashMap<>();
paraMap.put("objName",keyWord);
Result result = getDriver().session().run(querySql,paraMap);
List<Record> list = result.list() ;
if(null != result && list.size() == 1){//只有一條
kgSearchResult = getQueryResultById(""+getNodeId(list.get(0).asMap().get("sourceNode")),pageNo,pageSize);//根據nodeid查詢結果
}else if(null != result && list.size() > 1){//查出多條,合併
List<KgSearchResult> results = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
Long rootId = getNodeId(list.get(i).asMap().get("sourceNode"));
KgSearchResult ksr = getQueryResultById(""+rootId,pageNo,pageSize);
results.add(ksr);
}
kgSearchResult = mergeKgResult(sourceNodeId,keyWord,true,results);
}else if(!absolute){//沒有查到,可以非精確查詢
kgSearchResult = getAutoQueryResultByContainKeyword(sourceNodeId,keyWord,pageNo,pageSize);
}
if(null != kgSearchResult){
kgSearchResult.setPageNo(pageNo);
kgSearchResult.setPageSize(pageSize);
}
return kgSearchResult ;
}