전체 텍스트 검색

카우치베이스에서 지리공간 다각형 기반 검색을 만드는 방법

지리 공간 기능 는 수년 동안 사용자 참여도를 크게 높이는 것으로 입증되었습니다. 사실, 우리는 이 기능에 너무 익숙해져서 이제는 모든 종류의 추천(뉴스, 레스토랑, 제품)도 위치 기반이어야 한다고 기대하기까지 합니다. 오늘날 대부분의 애플리케이션은 주로 반경 기반 추천을 사용하고 있습니다. 쿼리를 사용하면 자연히 정확하지 않거나 최적이 아닌 결과가 나올 수 있습니다. 기업들이 사용자의 관심을 끌기 위해 경쟁하는 세상에서 정확도가 핵심 차별화 요소가 될 수 있으며, 이것이 바로 폴리곤 기반 검색이 점점 더 인기를 얻고 있는 이유입니다.

이 글에서는 Couchbase 6.6부터 추가된 기능인 Couchbase의 다각형 기반 검색에 대해 설명합니다.

 

지리공간 다각형 검색이란?

지리공간 쿼리 는 영역을 지정하고 영역 내의 위치에 대한 참조가 포함된 각 문서를 반환합니다. 영역과 위치는 다음을 통해 표현됩니다. 위도경도 좌표 쌍입니다.

지리공간에는 여러 가지 맛이 있습니다. 쿼리, 반경 기반 쿼리(포인트 거리라고도 함)가 가장 일반적으로 사용되며 가장 쉽게 시작할 수 있는 쿼리이기도 합니다. 좌표와 원의 반지름만 있으면 됩니다:

radius based search

 

경계 상자 검색에서는 대신 위도-경도 좌표 쌍을 두 개 지정해야 합니다. 이는 각각 왼쪽 상단과 오른쪽 하단 모서리를 나타내기 위해 사용됩니다. 직사각형. 문서가 직사각형 영역 내의 위치를 참조하는 경우 문서가 반환됩니다:

rectangle geospatial search with Couchbase NoSQL

위의 두 가지 방법은 대략적인 결과가 필요할 때는 유용하지만 검색 영역을 제한해야 할 때는 충분하지 않습니다:

polygon search building

지리공간 기하도형/다각형 검색을 사용하면 일련의 좌표로 정의된 닫힌 다각형 모양의 개체 안에 포함된 문서를 찾을 수 있습니다. 예를 들어 위 이미지에서는 정의한 다각형(이 경우 건물을 나타냄) 안에 있는 좌표를 가진 문서로만 검색을 제한하고 싶습니다.

다각형 쿼리에 지정할 수 있는 좌표/점 수에는 사실상 제한이 없지만, 다른 검색 엔진과 마찬가지로 매우 복잡한 다각형을 지정해야 하는 경우 자연스레 성능이 저하됩니다.

지리공간 다각형 기반 사용 사례

다각형 기반 검색(지오메트리 검색이라고도 함)은 위성 이미지를 분석하는 사람들에게만 국한되지 않으며, 이 기능을 활용할 수 있는 일반적인 사용 사례는 많습니다:

  • 실제 상태: 특정 마을 또는 특정 지역의 사무실/주택 찾기
  • 게임: 특정 지역에서 아이템 생성(예: 포켓몬고에서 지형에 따라 다른 종류의 포켓몬이 나타나는 경우)
  • 애널리틱스: 특정 지역을 지나간 사람 수(예: 특정 날짜에 공항에 얼마나 많은 Uber/Lyft 드라이버가 있었는지)
  • 광고: 사용자가 특정 장소(예: 쇼핑몰)에 있을 때 CPC(클릭당 비용)를 높입니다. 
  • 스마트 시티: 잠재적 위협(예: 우박, 홍수)에 대해 해당 지역의 시민들에게 알리기

지리공간 검색 성장

지난 몇 년간 사용자 위치 액세스 권한을 요청하는 앱의 비율을 비교하면 위치 기반 검색의 인기를 간접적으로 확인할 수 있습니다:

출처: https://hotforsecurity.bitdefender.com/blog/1-2-percent-of-google-play-store-is-thief-ware-study-shows-7340.html

 

위 그래프에 따르면 2013년에는 모바일 앱 중 11.68%만이 사용자 위치에 대한 액세스를 요청했습니다. 이 다른 보고서에 따르면 2014년에는 거의 24%에 달하는 앱이 사용자의 위치를 요청했습니다:

mobile_app_permissions_2014

출처: https://www.statista.com/statistics/486440/leading-google-play-app-permissions/

2020년으로 넘어가면, 이 세 번째 보고서는 이미 중국에서 95%의 앱이 사용자 위치에 대한 액세스를 요청하고 있음을 시사합니다:

permissions_mobile_app_2020

출처: https://www.statista.com/statistics/1111353/china-most-common-mobile-social-app-permissions-by-category/

 

지리공간 인덱스 만들기 

이 데모에는 다음이 필요합니다. 미국의 지진에 대한 이 작은 데이터 세트는. 라는 버킷을 생성하여 Couchbase에서 빠르게 로드할 수 있습니다.  지진을 클릭한 다음 문서 -> 문서 가져오기를 클릭하고 earthquake.json 파일을 선택한 다음 데이터 가져오기:

importa dateset into couch

이제 지리적 FTS 인덱스를 만들어 보겠습니다. 먼저 검색 탭으로 이동하여 "색인 추가". 그런 다음 다음 구성을 지정합니다:

    • 이름: earthquake_idx
    • 버킷: 지진
    • 유형 매핑을 입력합니다:
      • 기본값 선택 해제
      • 라는 새 유형 매핑을 추가합니다. 지진
        • 하위 필드를 삽입합니다: 
          • 필드: 지역
          • 유형: 지오포인트
          • 다음으로 검색 가능: 지역

index creation

인덱스 진행률이 100%에 도달하면 첫 번째 다각형 검색을 수행할 준비가 된 것입니다.

 

실제 다각형/기하학적 검색

검색에는 두 가지 주요 요구 사항이 있습니다: 좌표가 있는 필드는 색인화해야 합니다. 지오포인트 유형을 사용해야 하며, 좌표는 닫힌 다각형을 형성해야 하므로 첫 번째 좌표와 마지막 좌표가 같아야 합니다. 다음은 유효한 다각형의 예시입니다:

이 좌표를 지도에 표시하면 다음과 같은 결과가 나타납니다:

map coordinates

출처: https://www.keene.edu/campus/maps/tool/

 

지원되는 좌표 형식

다각형 좌표에 사용할 수 있는 형식은 다음과 같습니다:

  • 단일 배열: [ "위도, 경도", "위도, 경도", "위도, 경도", ...]
  • 다중 배열: [ [ 경도, 위도], [ 경도, 위도], ... ] [ [ 경도, 위도], ... ]
  • GeoJson: [ { "lat": 1, "lon": 1}, { "lat": 1, "lon": 1}, ... ]
  • 지오해시: [ "9Q8ZJBKP", "9Q8YVVDH", "9Q8YYP1E" ]

REST API를 사용한 위치 기반 정보 검색

기본 SDK를 사용하는 것 외에도 전체 텍스트 검색 REST API를 사용하여 다음을 수행할 수도 있습니다. 지리공간 쿼리 다음 형식을 사용합니다:

다음은 데이터 세트와 인덱스를 사용한 실제 예시입니다:

위 명령의 출력은 다음과 같습니다:

속성을 사용하여 좌표를 지정해야 합니다. 폴리곤_포인트. 이 쿼리를 확장하여 문서의 다른 속성(예: 지역, 크기 등)을 기준으로 필터링할 수도 있습니다.

 

지리공간 링/도넛 모양 검색 

특정 영역을 필터링하려는 경우 폴리곤에 하나 이상의 구멍을 지정할 수도 있습니다:

hole-polygon

다음을 사용하여 위 이미지와 같은 결과를 얻을 수 있습니다. 부울 쿼리:

 

요약하면, "" 안에 다각형 좌표를 지정하기만 하면 됩니다.필수" 블록과 "must_not“.

항상 다음을 사용하는 것이 좋습니다. 분리 구멍을 지정하는 동안에도 여전히 연결 구멍이 하나만 있는 경우 여러 개의 구멍에 결합을 사용하면 데이터가 제대로 필터링되지 않을 가능성이 있습니다(두 구멍 모두에 좌표가 있는 문서가 있는 경우가 아니라면). 무슨 말인지 잘 모르시겠다면 이 글을 참고하세요, 복합 쿼리에 대한 이 문서를 확인하세요.

 

더 읽어보기

지역 검색에 관심이 있으시다면, 다음 글을 읽어보시길 적극 추천합니다. 공식 문서. 전체 텍스트 검색을 처음 사용하는 경우 다음 내용을 확인하세요. FTS를 사용하여 넷플릭스와 유사한 검색을 만드는 방법을 보여주는 동영상.

또한 전체 텍스트 검색의 중요한 측면에 대해 설명하는 일련의 글들이 Couchbase 블로그에 게시되어 있습니다:

 

 

 

이 문서 공유하기
받은 편지함에서 카우치베이스 블로그 업데이트 받기
이 필드는 필수 입력 사항입니다.

작성자

게시자 데니스 로사, 개발자 옹호자, 카우치베이스

데니스 로사는 독일 뮌헨에 거주하고 있는 카우치베이스의 개발자 옹호자입니다. 그는 소프트웨어 엔지니어로서 탄탄한 경력을 쌓았으며 Java, Python, Scala, Javascript를 유창하게 구사합니다. Denis는 검색, 빅 데이터, AI, 마이크로서비스 및 개발자가 아름답고 빠르고 안정적이며 확장 가능한 앱을 만드는 데 도움이 되는 모든 것에 대해 글을 쓰는 것을 좋아합니다.

댓글 남기기

카우치베이스 카펠라를 시작할 준비가 되셨나요?

구축 시작

개발자 포털에서 NoSQL을 살펴보고, 리소스를 찾아보고, 튜토리얼을 시작하세요.

카펠라 무료 사용

클릭 몇 번으로 Couchbase를 직접 체험해 보세요. Capella DBaaS는 가장 쉽고 빠르게 시작할 수 있는 방법입니다.

연락하기

카우치베이스 제품에 대해 자세히 알고 싶으신가요? 저희가 도와드리겠습니다.