Pesquisa de texto completo

Como fazer uma pesquisa geoespacial baseada em polígonos no Couchbase

Recursos geoespaciais provaram ao longo dos anos que aumentam significativamente o envolvimento do usuário. Na verdade, ficamos tão acostumados com isso que agora até esperamos que qualquer tipo de recomendação (notícias, restaurantes, produtos) também seja baseada no local. Atualmente, a maioria dos aplicativos usa principalmente o Radius-based consultas, o que naturalmente pode levar a resultados imprecisos ou abaixo do ideal. Em um mundo em que as empresas estão competindo pela atenção do usuário, a precisão pode ser um fator diferenciador importante, e é por isso que a pesquisa baseada em polígonos está se tornando cada vez mais popular.

Neste artigo, falaremos sobre a pesquisa baseada em polígonos no Couchbase, um recurso que foi adicionado desde o Couchbase 6.6

 

O que é pesquisa de polígono geoespacial

consulta geoespacial especifica uma área e retorna cada documento que contém uma referência a um local dentro da área. As áreas e os locais são representados por meio de latitudelongitude pares de coordenadas.

Há muitos tipos de geoespacialização consulta, Baseado em raio As consultas (também conhecidas como Point Distance) são as mais comumente usadas e também as mais fáceis de começar. Tudo o que você precisa é de uma coordenada e do raio do círculo:

radius based search

 

Na pesquisa de caixa delimitadora, você precisa especificar dois pares de coordenadas de latitude e longitude. Eles são considerados, respectivamente, para indicar os cantos superior esquerdo e inferior direito de uma retângulo. Os documentos serão retornados se fizerem referência a um local dentro da área do retângulo:

rectangle geospatial search with Couchbase NoSQL

Os dois métodos acima são ótimos quando você precisa de resultados aproximados, mas não são suficientes quando você precisa limitar a área de pesquisa:

polygon search building

A pesquisa Geospatial Geometry/Polygon permite que você procure documentos contidos em um objeto fechado em forma de polígono definido por uma sequência de coordenadas. Na imagem acima, por exemplo, queremos limitar nossa pesquisa apenas a documentos com coordenadas que estejam dentro do polígono que definimos, que, nesse caso, representa um edifício.

Praticamente não há limite para o número de coordenadas/pontos que podem ser especificados em sua consulta de polígono, mas, como em qualquer outro mecanismo de pesquisa, o desempenho será naturalmente prejudicado se você precisar especificar polígonos muito complexos.

Caso de uso geoespacial baseado em polígonos

A pesquisa baseada em polígonos (também chamada de pesquisa geométrica) não se restringe às pessoas que analisam imagens de satélite, pois há muitos casos de uso comuns que podem se beneficiar dela:

  • Estado real: Encontre escritórios/casas em um determinado vilarejo ou em uma área específica
  • Jogos: Geração de itens em áreas específicas (por exemplo, diferentes tipos de pokemon que aparecem de acordo com o terreno no Pokemon Go)
  • Análises: Quantas pessoas passaram por uma região específica (por exemplo, quantos motoristas do Uber/Lyft estiveram no aeroporto em um determinado dia)
  • Propaganda: Aumentar o CPC (custo por clique) quando os usuários estiverem em um local específico (por exemplo, um shopping center) 
  • Cidades inteligentes: Notificar os cidadãos de uma região sobre uma possível ameaça (por exemplo, chuva de granizo, inundação)

Crescimento da pesquisa geoespacial

Podemos demonstrar indiretamente a popularidade da pesquisa baseada em localização comparando a porcentagem de aplicativos que solicitam permissão para acessar a localização do usuário ao longo dos anos:

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

 

De acordo com o gráfico acima, em 2013, apenas 11,68% dos aplicativos móveis solicitavam acesso à localização do usuário. Esse outro relatório sugere que, em 2014, quase 24% dos aplicativos estavam solicitando a localização do usuário:

mobile_app_permissions_2014

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

Se avançarmos para 2020, esse terceiro relatório já sugere que 95% dos aplicativos na China estão solicitando acesso à localização do usuário:

permissions_mobile_app_2020

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

 

Criação de índices geoespaciais 

Para esta demonstração, você precisará de esse pequeno conjunto de dados de terremotos nos EUA. Você pode carregá-lo rapidamente no Couchbase criando um bucket chamado  terremotose, em seguida, clique em Documentos -> Importar documentosselecione o arquivo earthquake.json e, em seguida, clique em Importar dados:

importa dateset into couch

Agora vamos criar nosso índice geo FTS. Primeiro, vá para a guia Search (Pesquisa) e clique em "Adicionar índice". Em seguida, especifique a seguinte configuração:

    • Nome: terremoto_idx
    • Balde: terremoto
    • Mapeamentos de tipos:
      • Desmarque o padrão
      • Adicione um novo mapeamento de tipo chamado terremoto
        • Inserir um campo filho: 
          • Campo: geo
          • Tipo: geoponto
          • Pesquisável como: geo

index creation

Quando o progresso do índice atingir 100%, estaremos prontos para fazer nossa primeira pesquisa de polígono.

 

Pesquisa de polígonos/geométrica em ação

A pesquisa tem dois requisitos principais: Os campos com coordenadas devem ser indexados usando o geopontos (como fizemos na sessão anterior), e as coordenadas devem formar um polígono fechado, o que significa que a primeira e a última coordenadas devem ser as mesmas. Aqui está um exemplo de um polígono válido:

Se traçarmos essas coordenadas em um mapa, o resultado será o seguinte:

map coordinates

Fonte: https://www.keene.edu/campus/maps/tool/

 

Formatos de coordenadas compatíveis

São aceitos os seguintes formatos para coordenadas de polígonos:

  • Matriz única: [ "lat, lon", "lat, lon", "lat, lon", ...]
  • Várias matrizes: [ [ lon, lat], [ lon, lat], ... ]
  • GeoJson: [ { "lat": 1, "lon": 1}, { "lat": 1, "lon": 1}, ... ]
  • Geohash: [ "9q8zjbkp", "9q8yvvdh", "9q8yyp1e" ]

Pesquisa geoespacial usando a API REST

Além de usar os SDKs nativos, você também pode usar a API REST do Full-Text Search para fazer consultas geoespaciais usando o seguinte formato:

Aqui está um exemplo real usando nosso conjunto de dados e índice:

e aqui está o resultado do comando acima:

Observe que você precisa especificar as coordenadas usando o atributo pontos_poligonais. Você também pode expandir essa consulta para filtrar por outros atributos do documento (por exemplo, Região, Magnitude, etc.)

 

Pesquisa geoespacial em forma de anel/ donut 

Você também pode especificar um ou mais buracos no polígono, caso queira filtrar algumas áreas específicas:

hole-polygon

Você pode obter algo parecido com a imagem acima usando consultas booleanas:

 

Em resumo, basta especificar as coordenadas do polígono dentro do campo "deve" e seus furos no bloco "must_not“.

Recomendo enfaticamente que você sempre use Disjunções ao especificar seus buracos, embora você ainda possa usar um Conjunção Se você tiver um único orifício, o uso da conjunção para vários orifícios possivelmente não filtrará seus dados corretamente (a menos que você tenha documentos com coordenadas dentro de ambos os orifícios). Se você não tem ideia do que estou falando, dê uma olhada nesta documentação sobre consultas compostas.

 

Leituras adicionais

Se você estiver interessado em Geo Search, recomendo fortemente que leia o documentação oficial. Caso você não conheça a Pesquisa de texto completo, dê uma olhada em vídeo mostrando como criar uma pesquisa semelhante à do Netflix usando o FTS.

Também temos uma série de artigos no blog do Couchbase falando sobre aspectos importantes da pesquisa de texto completo:

 

 

 

Compartilhe este artigo
Receba atualizações do blog do Couchbase em sua caixa de entrada
Esse campo é obrigatório.

Autor

Postado por Denis Rosa, defensor dos desenvolvedores, Couchbase

Denis Rosa é um Developer Advocate do Couchbase e mora em Munique, na Alemanha. Ele tem uma sólida experiência como engenheiro de software e fala fluentemente Java, Python, Scala e Javascript. Denis gosta de escrever sobre pesquisa, Big Data, IA, microsserviços e tudo o mais que possa ajudar os desenvolvedores a criar um aplicativo bonito, mais rápido, estável e escalável.

Deixe um comentário

Pronto para começar a usar o Couchbase Capella?

Iniciar a construção

Confira nosso portal do desenvolvedor para explorar o NoSQL, procurar recursos e começar a usar os tutoriais.

Use o Capella gratuitamente

Comece a trabalhar com o Couchbase em apenas alguns cliques. O Capella DBaaS é a maneira mais fácil e rápida de começar.

Entre em contato

Deseja saber mais sobre as ofertas do Couchbase? Deixe-nos ajudar.