次のクエリ文字列があります。
SELECT jcr:title, jcr:created, jcr:description FROM cq:PageContent WHERE jcr:path LIKE '/content/.../%' AND CONTAINS (., '*') ORDER BY date ASC
問題は、プロパティにアスタリスクがないにもかかわらず、クエリが指定されたパスからすべてのノードを返すことです。アスタリスク文字をエスケープしたかったのですが、結果は同じです。私はこのようなことを試しました:
SELECT jcr:title, jcr:created, jcr:description FROM cq:PageContent WHERE jcr:path LIKE '/content/.../%' AND CONTAINS (., '\*') ORDER BY date ASC
またはこのようなもの:
SELECT jcr:title, jcr:created, jcr:description FROM cq:PageContent WHERE jcr:path LIKE '/content/.../%' AND CONTAINS (., '\*\*\*\*\*\*\*\*\*\*\*') ORDER BY date ASC
これらすべてのクエリで、アスタリスク文字 (または 11 個) を含むプロパティがこれらのページにない場合でも、結果は同じです。
jcr:contains 関数のドキュメントには次のように書かれています。
searchexp リテラル インスタンス内で、一重引用符 ("'")、二重引用符 (""")、およびハイフン ("-") はバックスラッシュ ("\") でエスケープする必要があります。したがって、バックスラッシュ自体もエスケープする必要があり、最終的には二重バックスラッシュ (「\」) として。
のような他の文字*
は言及されていないので、エスケープ (?) しなくても機能するはずです。ここでそのような結果が得られる理由と、そのような文字を適切にエスケープする方法を理解してください。