如何解决使用复杂集合的 Azure 搜索
我们的数据结构类似于链接 https://docs.microsoft.com/en-us/azure/search/search-howto-complex-data-types
中的 HotelId 1 示例我们的要求如下:
输入:City = New York,StateProvince = NY,BaseRate = $100
选择字段:HotelId、HotelName、描述、标签、地址、房间
过滤器:仅 BaseRate 小于或等于 Input rate 且地址 City 和 State 匹配输入值的房间。在这个例子中,它应该只从房间中选择第一个房间,而不是所有房间。
所需的输出:
{
"HotelId": "1","HotelName": "Secret Point Motel","Description": "Ideally located on the main commercial artery of the city in the heart of New York.","Tags": ["Free wifi","on-site parking","indoor pool","continental breakfast"]
"Address": {
"StreetAddress": "677 5th Ave","City": "New York","StateProvince": "NY"
},"Rooms": [
{
"Description": "Budget Room,1 Queen bed (Cityside)","RoomNumber": 1105,"BaseRate": 96.99,}
]
}
欢迎任何有关如何为此编写查询或任何指针的帮助或指导。
解决方法
酒店样本索引中的记录由酒店组成,而不是房间。将其视为包含文档和段落的索引。您可以搜索在段落(房间)中包含某些内容的文档(酒店)。你得到的结果总是一个文档列表。据我所知,无法从响应中的记录中删除某些复杂类型。
顺便说一下,按照您的要求执行的查询(过滤掉房间除外)是这样的:
search=Address/City:"New York" AND Address/StateProvince:"NY"&$select=HotelId,HotelName,Description,Tags,Address,Rooms&$count=true&searchMode=all&queryType=full&$filter=Rooms/any(room: room/BaseRate lt 100.0)
可能的解决方法:
-
用房间作为记录设计索引
-
在您的前端应用程序中过滤掉高于所选基本费率的房间。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。