지리적 경계 다각형 쿼리
다음을 사용하여 텍스트 검색을 수행하는 기능 지리공간 쿼리 기능은 전체 텍스트 검색(FTS)에서 매우 강력하고 효과적인 기능입니다. 그리고 다음 릴리스에서는 보다 유연한 지리적 경계 다각형 쿼리 기능을 FTS에 추가할 예정입니다.
지금까지 FTS는 두 가지 유형의 지리적 쿼리를 지원합니다. 포인트 거리 쿼리 그리고 바운드 사각형 쿼리. 지점 거리 쿼리는 다음과 같은 검색을 제공하는 데 도움이됩니다. 주변의 모든 관심 지점을 찾습니다. 를 정렬된 거리 순서대로 정렬하는 반면, Bounded Rectangle 쿼리는 상단_좌측 및 하단_우측 모서리 위에 지정된 사각형 경계 내에서 모든 관심 지점을 찾는 데 도움이 됩니다.
대부분의 실제 사용 사례에서 지리공간 경계는 단순한 직사각형이나 정사각형 영역처럼 나타나지 않고 임의의 모양으로 나타납니다. 물론 직사각형/정사각형은 주어진 공간 쿼리에 대한 1차적인 근사치로 사용될 수 있습니다. 하지만 더 정확한 결과를 얻으려면 영역 경계를 더 세밀하게 지정할 수 있어야 합니다.
이에 따라 전체 텍스트 검색에 지리적 경계 다각형 쿼리가 도입되었습니다.
필수 항목
이 기능은 무작위 경계 다각형 쿼리를 수행하여 해당 다각형 영역에 속하는 문서를 선택하는 기능을 추가합니다. 입력 매개변수는 다각형 영역을 정의하는 경계 다각형 꼭지점을 나타내는 좌표 쌍의 배열입니다. (가급적 시계 반대 방향). 결과는 해당 영역에 있는 문서 목록이어야 합니다.
경계 다각형 쿼리에 대한 몇 가지 고려 사항은 다음과 같습니다:
- 다각형 좌표의 방향은 geoJSON 표준에 따라 결정됩니다. 참조 - geojson
- 좌표는 닫힌 형식(마지막 좌표를 첫 번째 좌표와 동일하게 지정)으로도 지정할 수 있지만 반드시 필요한 것은 아닙니다.
- 레이 캐스팅 기법을 사용하여 다각형에서 점 포함 여부를 찾습니다.
- 현재 다각형의 구멍은 지원되지 않습니다. 그러나 사용자가 부울 쿼리를 사용하여 이러한 쿼리를 수행할 수 있는 방법이 있습니다. (도넛과 같은 모양을 쿼리하려면 내부 다각형에 반드시_not 절을 사용하세요).
- 문서의 검색 가능한 지리적 위치 필드는 미리 빌드된 "지오포인트" 유형을 사용하여 색인을 생성해야 합니다.
운영 방식
FTS로 경계 다각형 쿼리를 얼마나 쉽게 시도해 볼 수 있는지 간단히 살펴보겠습니다. 3단계 과정만 거치면 됩니다:
- 경계 사각형/점 거리 쿼리에서와 동일하게 문서를 색인합니다.
- 쿼리할 다각형 영역(꼭지점)을 식별합니다.
- 아래 예제에서 언급된 geojson 형식 중 하나로 쿼리를 시도해 보세요.
예를 들어 문서에 "geo"라는 이름의 필드가 있고 이 필드에 지리적 위치 정보를 사용하려면 먼저 아래와 같이 인덱스 정의에 포함시켜야 합니다.

인덱싱이 완료되면 검색을 시도할 준비가 된 것입니다!
특정 지역 내에서 문서를 찾고 싶다고 가정해 보겠습니다.

다음과 같은 다각형 쿼리를 사용해 볼 수 있습니다.
curl -XPOST -H "콘텐츠 유형: 애플리케이션/json"
-u : http://:/api/index//쿼리 -d '
{
"query": {
"field": "geo",
"polygon_points": [
"37.79393211306212,-122.44234633404847",
"37.77995881733997,-122.43977141339417",
"37.788031092020155,-122.42925715405579",
"37.79026946582319,-122.41149020154114",
"37.79571192027403,-122.40735054016113",
"37.79393211306212,-122.44234633404847"
]
}
}'
FTS의 모든 지리적 쿼리는 다음을 지원합니다. geoJSON 형식을 사용하므로 위의 샘플 외에도 아래 다각형 좌표 형식 중 하나를 사용할 수 있습니다.
"polygon_points": [
{"lat": 37.79393211306212, "lon": -122.44234633404847},
{ "lat": 37.77995881733997, "경도": -122.43977141339417},
{ "lat": 37.788031092020155, "경도": -122.4292571540557},
{ "lat": 37.79026946582319,“lon”: -122.41149020154114},
{ "lat": 37.79571192027403,“lon”: -122.40735054016113},
{ "lat": 37.79393211306212, "경도": -122.44234633404847}
]
또는
"polygon_points": [
[ -122.44234633404847, 37.79393211306212],
[ -122.43977141339417, 37.77995881733997],
[ -122.42925715405579, 37.78803109202015],
[ -122.41149020154114, 37.79026946582319],
[ -122.40735054016113, 37.79571192027403],
[ -122.44234633404847,37.79393211306212]
]
또는
"polygon_points": ["9Q8ZJBKP", "9Q8YVVDH", "9Q8YYP1E", "9Q8YYRW8", "9Q8ZN83X", "9Q8ZJB0J"]
바운디드 폴리곤 쿼리를 직접 사용해보고 싶으신가요? 곧 출시될 Couchbase 서버 릴리스에 주목해 주세요.