lucene - JCR-SQL - 包含函数不会转义特殊字符?

标签 lucene aem jcr jcr-sql2

我有以下查询字符串:
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/

相关文章:

java - Java中Lucene 3.0能否获得按频繁更新字段排序的实时搜索结果

elasticsearch - 为什么lucene的段是不可变的

java - 在 siteadmin 中创建页面并单击后,如何使该组件立即显示在 Sidekick 中?

javascript - 向富文本编辑器的 Source 值添加一个额外的类

java - 比较器(排序)按优先级比较具有 3 个属性的对象数组列表

database - 使用可以经常更新的字段创建 Lucene 索引并按此字段过滤结果的最佳方法

xml - 带有 bool 表达式的 AEM XML 必需属性

Java JCR : Correspondance between parent and child node versions

java - 无法通过 RMI 在 JackRabbit 中加载 Nodetypes

elasticsearch - Elasticsearch返回的数据不正确?