Atlas Search Playground: experimentação fácil
Avalie esse Artigo
OAtlas Search adiciona uma pesquisa lexical poderosa, relevante e de texto completo aos seus dados. Um simples índice do Atlas Search em sua coleção tornará todos os campos de string pesquisáveis em formas de texto completo e poderá fornecer melhorias drásticas na experiência do usuário ao encontrar conteúdo relevante rapidamente.
Portanto, embora um índice
dynamic=true
possa lidar com a maioria dos tipos de dados e, especialmente, com os campos de string, há muitos desafios diferenciados da pesquisa de texto completo que podem exigir alguns ajustes de configuração, como o tratamento específico do idioma (singular/plural, diacríticos, palavras de parada etc.), gerenciamento de sinônimos, entidades específicas do domínio, terminologia e padrões. Há um processo de refinamento sem fim para entender como a pesquisa está sendo usada em seus dados e ajustar a configuração e as consultas de acordo.Sempre foi uma prática útil e comum para nós, desenvolvedores, ter uma espécie de “playground” para ter uma parte isolada de dados de teste e um ambiente manual interativo para experimentar uma coisa por vez. Com o Atlas Search, geralmente crio uma collection de teste temporária com apenas um documento ou três que criei por meio da UI do Atlas. Em seguida, criarei um Atlas Search index para essa collection de teste e usarei o Testador de Pesquisa ou a ferramenta de pipeline de agregação na Atlas UI e Compass para experimentar várias consultas e ver quais correspondem e quais não. Isso envolve ajustar as consultas e a configuração do índice (e esperar que o índice seja reconstruído!) para me ajustar à medida que eu evoluo a análise do tempo de índice e a criação de cláusulas de tempo de consulta. Em seguida, adicionarei mais alguns documentos à collection de teste para ver como está a funcionar a relevância quando a correspondência em apenas um documento de teste funcionar bem. A partir daí, pegarei o que aprendi e copiarei/colarei/adaptarei a configuração e a consulta em meu aplicativo.
Como todas as etapas acima são abordadas por todos nós nas trincheiras da implementação de pesquisas, faz sentido criar um ambiente que elimine o Atlas Search da collection, importação de dados, definição de índice, tempo de construção de índices e teste de query. O resultado final fornece uma sandbox gratuita e fácil de usar para simplificar o processo de dados/índice/teste.
Apresentando o Atlas Search Playground...
Vamos direto ao ponto. Abra o link a seguir em outro navegador para Go em uma sandbox com o ambiente mostrado na captura de tela. Isso demonstra uma das funcionalidades mais legais do Atlas Search Playground: links compartilhados. Um link compartilhado engloba os dados, configuração e query compartilhados pelo criador.
Aperte emExecutar para ver a milagrra acontecer!
Isenção de responsabilidade: O Atlas Search Playground é um trabalho ativo em andamento no momento da escrita deste documento, e são prováveis algumas grandes melhorias nele. As capturas de tela mostradas aqui podem variar de acordo com a sua experiência. Afinal, trata-se de um playground - quem sabe onde estarão as pás e os veículos de brinquedo amanhã?
Primeiro, observe os links de suporte à esquerda, que atualmente incluem links para a documentação do playground, um tutorial interativo do Search Playground, um link de feedback para que possamos continuar melhorando essa experiência de playground e um link de configuração para "Select Template " . Os modelos são exemplos de configuração do Playground integrados que você pode selecionar e executar para ter uma ideia de como alguns casos de uso comuns são resolvidos com o Atlas Search.
Vamos agora discutir cada painel em detalhes, na ordem lógica do fluxo de trabalho.
O painel Fonte de dados contém uma matriz JSON de documentos. Há um botão de importação útil se você tiver um pequeno conjunto de documentos em arquivo. Caso contrário, crie o seu à mão ou cole um pouco.
Uma array de apenas um único documento com um único campo é um bom início, para ter a impressão de executar uma query para ver se esse documento corresponde. No exemplo mostrado acima, o documento tem um campo de string
name
que contém a palavra "Playground. "O painel Fonte de dados também tem uma seção separada para sinônimos.
Confira o modelo Pesquisa de catálogo para obter um exemplo de como conectar sinônimos na configuração do índice e aproveitá-los durante as queries. Selecione um modelo no menu à esquerda e escolha o modelo "Catalog Search ".
A definição do índice do Atlas Search fica no painel Índice. Um bom ponto de partida é uma definição dinâmica que mapeia a maioria dos campos do documento. No exemplo mostrado acima, o
name
campo é mapeado automaticamente para o índice subjacente do Atlas Search usando o lucene.standard
analisador padrão . Esse analisador padrão tokenizará os valores das string em suas letras minúsculas individuais “ ”,words, tornando os valores de texto da string geralmente pesquisáveis por partes semelhantes a palavras sem diferenciar maiúsculas de minúsculas.Forneça um pipeline de agregação contendo
$search
como o primeiro estágio neste painel. Este não é um mecanismo de pipeline de agregação MongoDB completo, embora seja compatível com os mecanismos comuns de que você precisa para lidar com os resultados da pesquisa.No exemplo mostrado acima, a consulta é uma consulta
text
no campo name
para o termo "pLaYgRoUnD", que não corresponde ao conteúdo original, a menos que o caso seja ignorado.Isso começa como uma array
[]
vazia de resultados. PressioneExecutar para executar os estágios de query e colocar os resultados neste painel.No exemplo mostrado acima, os resultados incluem o documento de entrada, mostrando que ele corresponde ao operador $search especificado; se não tivesse correspondido, uma array vazia seria retornada.
A live a seguir demonstra como o playground funciona: uma única fonte de dados de documento ( painel inferior esquerdo) é indexada por meio da configuração ( painel superior direito ) e consultada ( painel superior esquerdo ) por meio da mesma configuração, produzindo os resultados ( painel inferior- painel direito).
O modelo “Catalog Search” (no link Selecionar modelo no lado esquerdo) cobre vários exemplos de casos de uso comuns: correspondência de valor exato (tipo de campo
token
), suporte a campo numérico e exemplo de consulta de intervalo e uma pesquisa de campo de string aproveitando sinônimos. Há muita coisa acontecendo aqui neste pequeno exemplo de configuração e consulta. Não se esqueça de pressionar Executar!Aqui está um playground que demonstra como trabalhar em um desafio de consulta específico, pressione novamente Executar depois de carregado:
Depois de executar este playground, os resultados não são o que esperariamos.
Um documento com
"name": "The Atlas Search Playground"
é indexado por meio de uma configuração básica de índice dinâmico. A pesquisa por searches
no campo name
...1 "text": { 2 "path": "name", 3 "query": "searches" 4 }
...não corresponde ao documento indexado. Por que isso? O padrão ( oanalisador
lucene.standard)
tokeniza nos limites básicos das palavras e coloca em minúsculas os termos indexados ou consultados — e é isso. Assim, search
foi uma das palavras indexadas do camponame
daquele documento. A consulta de searches
não faz não corresponder a nenhum termo indexado exatamente para uma querydoterm
.Aqui está um bom truque ao testar queries: Use
$searchMeta
para obter a contagem total, fazendo uma rápida verificação visual da expectativa de correspondência — sim (1) ao documento de amostra correspondido, ou não (0), não foi correspondência. Isso é mais conclusivo do que ver []
resultados vazios, especialmente se houver mais de um painel de resultados correspondentes e você não tiver certeza de quantos são.Vamos brincar e fazer melhor com essa consulta que deve corresponder à semântica rudimentar do inglês e aos termos praticamente idênticos, lexicalmente. Vamos alterar nossa configuração para usar o analisador
lucene.english
, que deriva o sufixo das palavras usando algumas regras centradas no inglês, como removers
à direita e sufixoses
, pois eles, geralmente, indicam plurais. Entre algumas outras heurísticas, ele também fará com que a busca por "country" e "countries" corresponda como seria de esperar.A análise e a construção de queries são o cerne da correspondência de textos, e há muitos truques para fazer com que as queries correspondam aos campos de maneiras mais livres e interessantes, desde o tratamento de texto em uma variedade de idiomas à correspondência parcial de padrões de substring até a correspondência fonética.
E aqui está nosso playground ajustado, mostrando que o documento de teste agora corresponde à mesma consulta com falha inicial, graças a um ajuste no analisador de texto usado.
O playground é um ótimo lugar para aprender e experimentar facetas. As facetas, no sentido $search, fornecem contexto de resultados de pesquisa adicional que consiste em contagens por bucket, em que um bucket é um valor de string ou um número ou faixa de datas. Isso é semelhante ao $group, embora muito mais eficiente em grandes conjuntos de resultados $search.
Indexamos documentos representando algumas frutas e um legume por meio de uma configuração que especifica o campo
type
do documento comostringFacet
:1 [ 2 { 3 "_id": 1, 4 "name": "Apple", 5 "type": "fruit" 6 }, 7 { 8 "_id": 2, 9 "name": "Asparagus", 10 "type": "vegetable" 11 }, 12 { 13 "_id": 3, 14 "name": "Banana", 15 "type": "fruit" 16 } 17 ]
Agora, usando
$searchMeta
sem um operador (corresponde a todos os documentos), facetamos toda a coleção de três documentos no campo type
e obtemos as contagens por buckettype
:1 [ 2 { 3 "count": { 4 "lowerBound": 3 5 }, 6 "facet": { 7 "type_facet": { 8 "buckets": [ 9 { 10 "_id": "fruit", 11 "count": 2 12 }, 13 { 14 "_id": "vegetable", 15 "count": 1 16 } 17 ] 18 } 19 } 20 } 21 ]
Um operador de pesquisa poderia ser fornecido a $searchMeta, o que restringiria o conjunto de resultados e os valores das facetas seriam ajustados para serem precisos em todo o conjunto de resultados restringidos.
Nosso exemplo final demonstra um cenário de sugestão conforme você digita para experimentar a correspondência detalhada e o ajuste de relevância.
Os dados são uma amostra de 500 documentos do exemplo da solução de pesquisa de sugestões relevantes enquanto você digita. Depois de executar esse playground, os resultados são as 10 melhores e mais relevantes correspondências para a consulta “matr” (como se alguém estivesse digitando, digamos, “matrix”).
Observe que neste playground há algumas seções comentadas na query. Ser capaz de comentar blocos da query ajuda a tentar várias opções. Nesse caso, os detalhes da pontuação e o realce das respostas são omitidos, mas facilmente incorporados ao descomentar esses blocos.
O tempo de reprodução acabou. É hora de cair na real com esse negócio de Atlas Search. No topo de cada playground há um link para Go para Atlas - clique nele para fazer login. Crie uma nova conta, se ainda não tiver uma, e leve o que aprender e aprimorou no playground para um persistente, ambiente Atlas pronto para produção.
Volte ao playground sempre que necessário para resolver os desafios de pesquisa, experimentar vários recursos ou criar um exemplo para compartilhar com outras pessoas.
Feliz jogo!