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」を検索しようとすると正しい結果が得られますが、「drugstore」または「my」を検索しようとすると何も得られません。また、「city」または「street」を検索しようとしても、何も得られません...どうすればこれを解決できますか? このように検索語を編集しようとしました
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 秒です。どうすればこれを解決できますか?