Consulta de polígonos delimitados
La posibilidad de realizar búsquedas de texto con consulta geoespacial es una función muy potente y eficaz de la búsqueda de texto completo (FTS). Además, en las próximas versiones incorporaremos a FTS la función de consulta de polígonos delimitados geográficamente.
Hasta ahora, el FTS admitía dos tipos de consultas geográficas. a saber Consultas de distancia entre puntos y Consultas sobre rectángulos delimitados. Point Distance query te ayuda en búsquedas como - encontrar todos los puntos de interés cercanos a ti en su orden de distancia, mientras que la consulta Rectángulo delimitado ayuda a encontrar todos los puntos de interés dentro del límite del rectángulo especificado en las esquinas superior_izquierda e inferior_derecha.
Sabemos que, en la mayoría de los casos de uso de la vida real, los límites geoespaciales tienen formas aleatorias, es decir, no aparecen como simples regiones rectangulares o cuadradas. Ciertamente, los rectángulos/cuadrados podrían utilizarse como una aproximación de primera mano para la consulta espacial dada. Pero para obtener resultados más precisos, deberíamos poder especificar los límites de la región de forma más granular.
Y eso lleva a la introducción de las consultas de polígonos geo delimitados en la búsqueda de texto completo.
Esenciales
Esta función añade la capacidad de realizar una consulta aleatoria del polígono delimitador para seleccionar los documentos que caen dentro de esa área poligonal. Los parámetros de entrada serían una matriz de pares de coordenadas que representen los vértices del polígono delimitador que definen el área del polígono. (preferiblemente en sentido contrario a las agujas del reloj). Los resultados deben ser una lista de documentos que se encuentra dentro de la zona.
Algunas consideraciones para las consultas de polígonos delimitados son:
- La orientación de las coordenadas de los polígonos se rige por el estándar geoJSON. ref - geojson
- Las coordenadas también podrían especificarse en un formato cerrado (dando la última coordenada igual que la primera), pero no es necesario.
- Utiliza la técnica de fundición de rayos para encontrar la inclusividad de puntos en el polígono.
- Ahora no se admiten agujeros en los polígonos. Pero hay una manera de que los usuarios puedan realizar tales consultas usando consultas booleanas. (cláusula must_not para los polígonos interiores para consultar formas como los donuts).
- Es necesario indexar el campo de geolocalización del documento mediante el tipo "geopunto" predefinido.
Modus operandi
Exploremos rápidamente lo fácil que es probar una consulta de polígono delimitado con FTS. Es sólo un proceso de 3 pasos:
- Indexe los documentos de la misma manera que lo hacemos para la consulta de rectángulo delimitado/distancia entre puntos.
- Identifique un área poligonal (vértices) dentro de la cual necesita realizar la consulta.
- Pruebe la consulta en cualquiera de los formatos geojson mencionados en el ejemplo siguiente.
Por ejemplo, si tiene un campo denominado "geo" en el documento que contiene la variable localización geográfica primero debe incluirla en la definición del índice, como se indica a continuación.

Una vez completada la indexación, ¡ya puedes probar tus búsquedas!
Supongamos que está interesado en encontrar documentos dentro de una región determinada.

Puede probar las consultas de polígonos como las siguientes.
curl -XPOST -H "Content-Type: application/json"
-u : https://:/api/index//query -d '
{
"consulta": {
"campo": "geo",
"puntos_polígono": [
"37.79393211306212,-122.44234633404847",
"37.77995881733997,-122.43977141339417",
"37.788031092020155,-122.42925715405579",
"37.79026946582319,-122.41149020154114",
"37.79571192027403,-122.40735054016113",
"37.79393211306212,-122.44234633404847"
]
}
}'
Todas las consultas geográficas de FTS admiten geoJSON y, por lo tanto, se puede utilizar cualquiera de los siguientes formatos de coordenadas poligonales además del ejemplo anterior
"puntos_polígono": [
{"lat": 37.79393211306212, "lon": -122.44234633404847},
{"lat": 37.77995881733997, "lon": -122.43977141339417},
{"lat": 37.788031092020155, "lon": -122.4292571540557},
{"lat": 37.79026946582319,“lon”: -122.41149020154114},
{"lat": 37.79571192027403,“lon”: -122.40735054016113},
{"lat": 37.79393211306212, "lon": -122.44234633404847}
]
O
"puntos_polígono": [
[ -122.44234633404847, 37.79393211306212],
[ -122.43977141339417, 37.77995881733997],
[ -122.42925715405579, 37.78803109202015],
[ -122.41149020154114, 37.79026946582319],
[ -122.40735054016113, 37.79571192027403],
[ -122.44234633404847,37.79393211306212]
]
O
"polygon_points": ["9q8zjbkp", "9q8yvvdh", "9q8yyp1e", "9q8yyrw8", "9q8zn83x", "9q8zjb0j"]
¿Quieres ensuciarte las manos con consultas de polígonos delimitados? Presta atención a las próximas versiones del servidor Couchbase.