问题描述
我们的数据结构类似于链接 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)
可能的解决方法:
-
用房间作为记录设计索引
-
在您的前端应用程序中过滤掉高于所选基本费率的房间。