我有以下查询字符串: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 个)的属性
documentation of jcr:contains function说:
Within the searchexp literal instances of single quote (“'”), double quote (“"”) and hyphen (“-”) must be escaped with a backslash (“\”). Backslash itself must therefore also be escaped, ending up as double backslash (“\”).
其他字符如
*
没有提到所以即使没有任何转义(?)它也应该工作。请让我理解为什么我在这里得到这样的结果以及如何正确地转义这样的字符。
最佳答案
您放入的文档有答案。有一些特殊字符必须转义,但是如果您希望诸如星号之类的文字仅匹配字符“*”,那么您必须使用转义字符,即反斜杠。文档说明有点令人困惑的是,在解析字符串时反斜杠本身是一个特殊字符,因此如果您希望将反斜杠视为转义字符,则需要对其进行转义。
换句话说,要避开星号,您需要将其写为
\\*
关于lucene - JCR-SQL - 包含函数不会转义特殊字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49694248/