Consulta de polígono delimitado geograficamente
A capacidade de realizar pesquisa de texto com consulta geoespacial é um recurso muito avançado e eficaz da pesquisa de texto completo (FTS). E estamos trazendo o recurso mais flexível de consulta de polígonos delimitados geograficamente para o FTS nas próximas versões.
Até o momento, o FTS suporta dois tipos de consultas geográficas, a saber Consultas de distância de pontos e Consultas de retângulo limitado. A consulta Point Distance ajuda você a realizar pesquisas como - encontrar todos os pontos de interesse próximos a você em sua ordem ordenada de distância, enquanto a consulta Bounded Rectangle ajuda a encontrar todos os pontos de interesse dentro do limite do retângulo especificado nos cantos superior esquerdo e inferior direito.
Sabemos que, na maioria dos casos de uso na vida real, os limites geoespaciais têm formas aleatórias, ou seja, não aparecem apenas como regiões retangulares ou quadradas simples. Certamente, os retângulos/quadrados podem ser usados como uma aproximação de primeira mão para a consulta espacial em questão. Mas, para obter resultados mais precisos, devemos poder especificar os limites da região de forma mais granular.
E isso leva à introdução de consultas de polígonos com limites geográficos na pesquisa de texto completo.
Essenciais
Esse recurso adiciona a capacidade de executar uma consulta aleatória de polígono delimitador para selecionar documentos que se enquadram nessa área de polígono. Os parâmetros de entrada seriam uma matriz de pares de coordenadas representando os vértices do polígono delimitador que definem a área do polígono. (de preferência no sentido anti-horário). Os resultados devem ser uma lista de documentos que estão dentro da área.
Algumas considerações sobre as consultas de polígonos delimitados são:
- A orientação das coordenadas do polígono é regida pelo padrão geoJSON. ref - geojson
- As coordenadas também podem ser especificadas em um formato fechado (fornecendo a última coordenada igual à primeira), mas não é necessário.
- Ele usa a técnica de projeção de raios para encontrar a inclusão de pontos no polígono.
- Agora não há suporte para buracos nos polígonos. Mas há uma maneira de os usuários realizarem essas consultas usando consultas booleanas. (cláusula must_not para os polígonos internos para consulta de formas como donuts).
- O campo de geolocalização pesquisável no documento precisa ser indexado usando o tipo "geopoint" pré-construído.
Modus Operandi
Vamos explorar rapidamente como é fácil testar uma consulta de polígono delimitado com o FTS. É um processo de apenas três etapas:
- Indexar os documentos da mesma forma que fazemos para a consulta de retângulo delimitado/distância de ponto.
- Identifique uma área de polígono (vértices) na qual você precisa fazer a consulta.
- Experimente a consulta em qualquer um dos formatos geojson mencionados no exemplo abaixo.
Por exemplo, se você tiver um campo chamado "geo" no documento que contém o localização geográfica então, primeiro você precisa incluí-las na definição do índice, como abaixo.
Quando a indexação estiver concluída, você estará pronto para tentar fazer suas pesquisas!
Digamos que você esteja interessado em encontrar documentos em uma determinada região.
Você pode tentar as consultas de polígono como abaixo.
curl -XPOST -H "Content-Type: application/json"
-u : http://:/api/index//query -d '
{
"query": {
"field" (campo): "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"
]
}
}'
Todas as consultas geográficas no FTS são compatíveis com geoJSON e, portanto, qualquer um dos formatos de coordenadas de polígono abaixo pode ser usado, além do exemplo acima
"polygon_points": [
{"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}
]
Ou
"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]
]
Ou
"polygon_points": ["9q8zjbkp", "9q8yvvdh", "9q8yyp1e", "9q8yyrw8", "9q8zn83x", "9q8zjb0j"]
Ansioso para colocar a mão na massa com consultas de polígonos delimitados? Preste atenção às próximas versões do servidor Couchbase.