위치 정보 검색

인덱스를 생성할 때 각 문서에 위도·경도의 위치 정보를 추가해 두면, 검색 시 지정한 지점으로부터의 거리를 조건으로 검색 결과를 좁힐 수 있습니다.

개요

위치 정보 검색에서는 지정한 지점(위도·경도)을 중심으로 하는 반경 내에 포함된 문서만 검색 결과에 포함합니다. 이 필터링은 OpenSearch의 geo_distance 쿼리를 이용한 필터로 적용되기 때문에 점수(관련도)에는 영향을 주지 않습니다. 또한 거리에 의한 정렬은 지원하지 않습니다.

위치 정보를 저장하는 필드는 OpenSearch의 매핑에서 geo_point 형으로 정의되어 있어야 합니다. 기본적으로 location 필드가 geo_point 형으로 준비되어 있습니다. 다만 location 필드에 값을 저장하는 처리는 기본적으로 제공되지 않으므로, 데이터 스토어 크롤링의 필드 매핑이나 스크립트, 검색 엔진에 문서를 등록하는 API 등을 이용하여 이용자가 직접 위치 정보를 저장해야 합니다.

사용 방법

위치 정보 검색은 검색 요청에 다음 매개변수를 추가하여 지정합니다. 기본적으로 location 필드에 대해 이용할 수 있습니다.

매개변수 설명
geo.<fieldname>.point 중심이 되는 지점의 위도·경도를 위도,경도 형식으로 지정합니다. 값은 10진수 도(Double 형)이며, 쉼표로 구분한 두 개의 숫자를 지정합니다. 예: 35.681236,139.767125
geo.<fieldname>.distance 중심 지점으로부터의 거리(반경)를 지정합니다. 예: 10km

표: 요청 매개변수

<fieldname>에는 위치 정보를 저장한 필드 이름을 지정합니다. 지정할 수 있는 것은 query.geo.fields에 등록된 필드뿐이며, 기본값은 location입니다. 그 외의 필드를 사용하려면 geo_point 형으로 매핑한 후, fess_config.propertiesquery.geo.fields에 쉼표로 구분하여 추가합니다.

예를 들어 위도 35.681236, 경도 139.767125(도쿄역 부근)로부터 반경 10km 이내의 문서를 검색하는 경우, 검색 요청에 다음 매개변수를 추가합니다.

geo.location.point=35.681236,139.767125&geo.location.distance=10km

거리 단위

geo.<fieldname>.distance의 값은 OpenSearch의 거리 단위로 해석됩니다. km(킬로미터) 외에도 mm, cm, m, in, ft, yd, mi(마일), nmi(해리) 등을 사용할 수 있습니다. 단위를 생략하고 숫자만 지정한 경우에는 미터로 처리됩니다(예: 500은 500미터).

복수 지정

  • 동일한 필드에 대해 geo.<fieldname>.point를 여러 번 지정한 경우, 그중 어느 한 지점의 반경 내에 포함되는 문서가 검색됩니다(OR 조건).

  • 서로 다른 필드에 대해 각각 위치 정보를 지정한 경우, 모든 조건을 만족하는 문서가 검색됩니다(AND 조건).

참고

geo.<fieldname>.pointgeo.<fieldname>.distance는 둘 다 지정해야 합니다. distance가 지정되어 있지 않은 경우, 해당 point의 조건은 무시됩니다. 또한 point의 값이 위도,경도 형식(쉼표로 구분한 두 개의 숫자)이 아니거나 숫자로 해석할 수 없는 경우에는 오류가 발생합니다.