我正在尝试学习 OData 版本 4 协议(protocol)并使用 Northwind 数据库运行查询。
OData 4 引入了使用 $search
的自由文本搜索,但我尝试过的查询都失败了。
我尝试了一些事情(有很多变体):
- http://services.odata.org/V4/Northwind/Northwind.svc/Customers ?$search=%28City%20eq%20Berlin%29
- http://services.odata.org/V4/Northwind/Northwind.svc/Customers ?$search=City%20eq%20柏林
- http://services.odata.org/V4/Northwind/Northwind.svc/Customers ?$search=柏林
我收到的错误消息是:查询参数“$search”以系统保留的“$”字符开头,但无法识别。
官方docs这里不多说,引用另一个source确切的格式。但是,格式对我来说非常神秘......
从文档来看,总体思路是 http://host/service/Products?$search=blue OR green
,这似乎与我的示例一致。所以不确定我在这里做错了什么。
有没有人成功地使用过这个并且可以给我一个例子?谢谢!
最佳答案
您收到来自 http://services.odata.org/V4/Northwind/Northwind.svc 的错误消息因为此服务尚未更新以支持 $search。 ODL从6.1.0版本开始支持$search。请查看6.1.0 release notes
From the spec , "$search 系统查询选项将结果限制为仅包含与指定搜索表达式匹配的那些实体。匹配意味着什么的定义取决于实现。"由于匹配规则依赖于服务实现,服务可以确定哪些属性或什至属性组合来匹配搜索表达式。
此服务 http://odatae2etest.azurewebsites.net/demo/DefaultService/已经简单地实现了 $search,并且此服务选择具有第一个字符串类型属性来匹配搜索表达式。
因此对于此服务,http://odatae2etest.azurewebsites.net/demo/DefaultService/ProductDetails ?$search=snack 实际上是为了返回描述中包含“snack”的 ProductDetails。
否则,$search 支持 AND、OR、NOT 运算。
关于需要 odata v4 搜索示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23893363/