지정된 참조 지점에서 거리를 기준으로 결과를 정렬하여 검색 환경 개선

완료됨

종종 사용자는 지리적 위치와 연결된 항목을 검색하려고 합니다. 예를 들어 해당 위치에 가장 가까운 커피숍을 찾으려고 할 수 있습니다. 지구 표면에서의 위치를 비교할 수 있도록 AI 검색에는 쿼리에서 호출할 수 있는 지리적 공간 함수가 포함되어 있습니다.

여기서는 물리적 지점 근처 또는 경계 영역 내에 있는 항목을 검색하는 방법을 알아봅니다.

지리적 공간 함수란?

이 모듈의 이전 단원에서는 DescriptionCategory와 같이 검색할 필드를 지정하여 사용자가 호텔을 찾는 방법을 알아보았습니다.

search=(Description:luxury OR Category:luxury)&$select=HotelId, HotelName, Category, Tags, Description&$count=true

호텔을 예약할 때 중요한 고려 사항은 지리적 위치입니다. 예를 들어 에펠탑 관광 여행을 예약하는 경우 근처에 있는 호텔을 원할 것입니다.

AI 검색에 위치 정보에 따라 결과를 반환하도록 요청하려면 쿼리에 두 가지 함수를 사용할 수 있습니다.

  • geo.distance. 이 함수는 지정한 지점에서 검색 결과의 위치까지 지구 표면을 가로지르는 직선 거리를 반환합니다.
  • geo.intersects. 이 함수는 검색 결과의 위치가 지정한 다각형 내에 있는 경우 true를 반환합니다.

이러한 함수를 사용하려면 인덱스에 결과의 위치가 포함되어 있는지 확인합니다. 위치 필드에는 데이터 형식 Edm.GeographyPoint가 있어야 하며 위도와 경도를 저장해야 합니다.

geo.distance 함수 사용

geo.distance 함수는 두 점을 매개 변수로 사용하고 두 매개 변수 사이의 거리(킬로미터)를 반환합니다.

에펠탑 근처의 호텔을 찾고 있다고 가정해 보겠습니다. 위의 쿼리를 수정하여 새 필터를 추가할 수 있습니다.

search=(Description:luxury OR Category:luxury)$filter=geo.distance(location, geography'POINT(-122.131577 47.678581)') le 5&$select=HotelId, HotelName, Category, Tags, Description&$count=true

이 쿼리는 에펠탑에서 5km 이내에 있는 인덱스의 모든 고급 호텔을 반환합니다. 쿼리에서 다음이 적용됩니다.

  • Location은 호텔 위치를 저장하는 필드의 이름입니다.
  • geography'POINT(2.294481 48.858370)'는 에펠탑의 경도 및 위도 위치입니다.
  • le 5geo.distance 함수가 5km보다 작거나 같은 숫자를 반환하는 경우 호텔을 결과에 포함하도록 지정합니다.

중요

필터에서 geo.distance를 사용하는 경우 같음(eq) 및 같지 않음(ne) 연산자는 지원되지 않습니다. 대신 lt, le, gt 또는 ge를 사용합니다.

geo.distance는 거리를 킬로미터 단위로 반환하므로 orderby 절에서도 사용할 수 있습니다. 예를 들어 이 쿼리는 인덱스 내의 모든 고급 호텔을 반환하지만 에펠탑에 가장 가까운 호텔을 먼저 표시합니다.

search=(Description:luxury OR Category:luxury)&orderby=geo.distance(Location, geography'POINT(2.294481 48.858370)') asc&$select=HotelId, HotelName, Category, Tags, Description&$count=true

이 쿼리에서 asc는 고급 호텔이 에펠탑에서 거리 오름차순으로 반환되도록 지정합니다.

geo.intersects 함수 사용

에펠탑 여행을 위해 파리의 7구에 머물기로 결정했다고 가정해 봅시다. 호텔을 검색할 때 이 영역을 최대한 정확하게 지정하려고 합니다. geo.intersects 함수를 사용하여 이러한 쿼리를 작성할 수 있습니다.

geo.intersects 함수는 위치를 지구 표면의 다각형과 비교하여 3개 이상의 지점으로 지정합니다. 다각형을 사용하면 파리 구와 같은 영역과 밀접하게 일치하는 셰이프를 만들 수 있습니다. 이 다각형을 사용하여 쿼리에 지리적 필터를 추가합니다.

search=(Description:luxury OR Category:luxury) AND geo.intersects(Location, geography'POLYGON((2.32 48.91, 2.27 48.91, 2.27 48.60, 2.32 48.60, 2.32 48.91))')&$select=HotelId, HotelName, Category, Tags, Description&$count=true

이 쿼리는 에펠탑 주변의 광장 내에 있는 모든 고급 호텔을 반환합니다. 5개 이상의 점을 사용하여 보다 정확한 영역을 만들 수 있습니다.

중요

다각형에서는 점을 시계 반대 방향으로 지정해야 하며 다각형은 닫혀야 합니다. 즉, 지정된 첫 번째 점과 마지막 점이 동일해야 합니다.

geo.intersects는 부울 값을 반환하므로 orderby 절에서 사용할 수 없습니다.