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"
},

维基 Link http://wiki.sensenet.com/OData_REST_API

length 操作错误地包含在支持的方法列表中,对此我们深表歉意。 SenseNet 将这些过滤器编译为 Lucene 查询,并且不可能在 Lucene 中编写这样的查询,在字段上执行操作

(其余方法,如 substringofstartswith 可以很容易地编译为通配符表达式,因此应该可以工作)

不幸的是,'empty' 表达式也不被 Lucene 支持,因为它们的 document/term 结构。所以下面的表达式也不起作用:

Description eq ''

编辑:作为解决方法,开发人员可以创建自定义 字段索引处理程序

对于要检查是否为空的每个字段(例如 Description),您可以创建一个技术隐藏的 bool 字段(IsDescriptionEmpty)在内容类型定义中。您唯一需要创建和定义的是自定义字段索引处理程序 class。在您的情况下,它将继承自内置的 bool 字段索引处理程序,并且您可以 return 基于目标字段(在本例中为描述)是否为布尔索引值是否为空

在此之后,您将能够像下面这样定义搜索表达式:

+Type:File +IsDescriptionEmpty:true

请查看下面的 wiki 文章和索引处理程序示例的源代码。

How to create a field indexhandler