Sensenet 长度过滤器不起作用
Sensenet length filter Not working
我想使用 Sensenet Odata Rest 查询空字段和非空字段 API。他们的文档提到了一个名为 'length' 的过滤函数。我试图用长度操作查询字段,但失败并出现错误。
这是我用过的滤镜
$filter=length(Name) eq 2
Sense/Net6.5.4.9496
异常
"code": "NotSpecified",
"exceptiontype": "SnNotSupportedException",
"message": {
"lang": "en-us",
"value": "Unknown method: length"
},
length 操作错误地包含在支持的方法列表中,对此我们深表歉意。 SenseNet 将这些过滤器编译为 Lucene 查询,并且不可能在 Lucene 中编写这样的查询,在字段上执行操作。
(其余方法,如 substringof 或 startswith 可以很容易地编译为通配符表达式,因此应该可以工作)
不幸的是,'empty' 表达式也不被 Lucene 支持,因为它们的 document/term 结构。所以下面的表达式也不起作用:
Description eq ''
编辑:作为解决方法,开发人员可以创建自定义 字段索引处理程序。
对于要检查是否为空的每个字段(例如 Description),您可以创建一个技术隐藏的 bool 字段(IsDescriptionEmpty)在内容类型定义中。您唯一需要创建和定义的是自定义字段索引处理程序 class。在您的情况下,它将继承自内置的 bool 字段索引处理程序,并且您可以 return 基于目标字段(在本例中为描述)是否为布尔索引值是否为空
在此之后,您将能够像下面这样定义搜索表达式:
+Type:File +IsDescriptionEmpty:true
请查看下面的 wiki 文章和索引处理程序示例的源代码。
我想使用 Sensenet Odata Rest 查询空字段和非空字段 API。他们的文档提到了一个名为 'length' 的过滤函数。我试图用长度操作查询字段,但失败并出现错误。
这是我用过的滤镜
$filter=length(Name) eq 2
Sense/Net6.5.4.9496
异常
"code": "NotSpecified",
"exceptiontype": "SnNotSupportedException",
"message": {
"lang": "en-us",
"value": "Unknown method: length"
},
length 操作错误地包含在支持的方法列表中,对此我们深表歉意。 SenseNet 将这些过滤器编译为 Lucene 查询,并且不可能在 Lucene 中编写这样的查询,在字段上执行操作。
(其余方法,如 substringof 或 startswith 可以很容易地编译为通配符表达式,因此应该可以工作)
不幸的是,'empty' 表达式也不被 Lucene 支持,因为它们的 document/term 结构。所以下面的表达式也不起作用:
Description eq ''
编辑:作为解决方法,开发人员可以创建自定义 字段索引处理程序。
对于要检查是否为空的每个字段(例如 Description),您可以创建一个技术隐藏的 bool 字段(IsDescriptionEmpty)在内容类型定义中。您唯一需要创建和定义的是自定义字段索引处理程序 class。在您的情况下,它将继承自内置的 bool 字段索引处理程序,并且您可以 return 基于目标字段(在本例中为描述)是否为布尔索引值是否为空
在此之后,您将能够像下面这样定义搜索表达式:
+Type:File +IsDescriptionEmpty:true
请查看下面的 wiki 文章和索引处理程序示例的源代码。