0

我想使用 Sensenet Odata Rest API 查询空字段和非空字段。他们的文档提到了一个称为“长度”的过滤器功能。我尝试使用长度操作查询该字段,但失败并出现错误。

这是我用过的过滤器

$filter=length(Name) eq 2

感知/网络 6.5.4.9496

例外

"code": "NotSpecified",
"exceptiontype": "SnNotSupportedException",
"message": {
"lang": "en-us",
"value": "Unknown method: length"
},

维基链接http://wiki.sensenet.com/OData_REST_API

4

1 回答 1

2

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

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

不幸的是,Lucene 也不支持“空”表达式,因为它们的文档/术语结构。所以下面的表达式也不起作用:

Description eq ''

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

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

在此之后,您将能够定义如下搜索表达式:

+Type:File +IsDescriptionEmpty:true

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

如何创建字段索引处理程序

于 2016-10-07T16:11:22.760 回答