使用复杂集合的 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)

可能的解决方法:

  1. 用房间作为记录设计索引

  2. 在您的前端应用程序中过滤掉高于所选基本费率的房间。