지정된 참조 지점에서 거리를 기준으로 결과를 정렬하여 검색 환경 개선
종종 사용자는 지리적 위치와 연결된 항목을 검색하려고 합니다. 예를 들어 해당 위치에 가장 가까운 커피숍을 찾으려고 할 수 있습니다. 지구 표면에서의 위치를 비교할 수 있도록 AI 검색에는 쿼리에서 호출할 수 있는 지리적 공간 함수가 포함되어 있습니다.
여기서는 물리적 지점 근처 또는 경계 영역 내에 있는 항목을 검색하는 방법을 알아봅니다.
지리적 공간 함수란?
이 모듈의 이전 단원에서는 Description
및 Category
와 같이 검색할 필드를 지정하여 사용자가 호텔을 찾는 방법을 알아보았습니다.
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 5
는geo.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
절에서 사용할 수 없습니다.