Aprimorando a pesquisa com elástico

Como estamos aprimorando a pesquisa em nosso aplicativo usando a Pesquisa elástica

Gokul NK Blocked Unblock Seguir Seguindo 9 de julho

Em nosso aplicativo de destaques , trabalhamos recentemente para melhorar a funcionalidade de pesquisa. Todas as chamadas da API de pesquisa são roteadas por meio do servidor de nó de backend api para cuidar dos direitos de autenticação e acesso.

Nossa pesquisa avançada é a seguinte.

Como você pode ver na imagem acima, tivemos cinco campos que foram críticos para a pesquisa. Usando nosso aplicativo, você poderá destacar qualquer texto relevante em uma página da Web, adicionar notas e tags a ele. Então, na pesquisa, queremos permitir que os usuários encontrem um destaque especial usando

  1. Texto destacado.
  2. Tags adicionadas.
  3. Adicionado nota.
  4. URL em que o destaque foi feito.
  5. Data em que o destaque foi feito.

Nós implementamos a pesquisa e tudo estava funcionando bem. Mas o problema é que os usuários raramente se lembram se a palavra-chave que estão pesquisando era parte de um determinado campo.

Então, nós dividimos o problema em duas etapas. Primeiro, independentemente do campo em que a palavra-chave foi inserida para obter os resultados. Em segundo lugar, certificando-se de que os resultados mais relevantes ainda estavam no topo.

1. Garantir que o conjunto de resultados não seja muito restritivo

Criamos um campo temporário que batia em todas as palavras-chave inseridas pelo usuário, independentemente do campo em que ele havia entrado. Usamos esse campo batido como palavras-chave para fazer uma filtragem de pesquisa de texto. Portanto, se qualquer uma das palavras-chave inseridas pelos usuários estivesse presente em qualquer um dos campos de um documento, ela filtraria / selecionaria esse documento. Para registros que correspondem a essa consulta, adicionamos apenas uma pontuação escalar simples.

2. Certificando-se de que os resultados relevantes flutuaram para o topo

E, no segundo nível, pesquisamos a palavra-chave inserida no filtro de campo da interface do usuário com o campo exato no back-end. Se isso corresponder, adicionamos uma pontuação adicional com maior peso. Portanto, se houvesse uma correspondência de um para um, o documento chegaria ao topo do resultado, pois tem mais pontuação de relevância.

Nem todos os campos nascem iguais. Em nosso caso, campos de URL e campos de tag são mais contextuais. Então, se houver uma correspondência nesses campos, usamos um multiplicador maior para a pontuação.

O ajuste fino da consulta foi um pouco difícil. Então nós definimos explain = true. Isso explica como a pontuação foi calculada para a consulta, combinação de documentos. Você pode ler mais sobre isso neste link https://www.elastic.co/guide/en/elasticsearch/reference/1.4/search-explain.html

Nós passamos a saída da explicação para o front end na nossa instância de dev e apenas a exibimos na exibição dos resultados junto com a partitura. Dessa forma, poderíamos ver facilmente como a pontuação estava afetando nossa pesquisa. Como exercício, escolhemos um registro específico e tentamos pesquisá-lo. Isso foi junto com a confirmação de que se nosso resultado estava flutuando para o topo ou não, fomos capazes de identificar como a nossa pontuação estava afetando os resultados.

Você pode conferir como nossa pesquisa e avançado estão trabalhando em https://alpha.app.learningpaths.io/#/highlights/public

Ainda é um trabalho em andamento e gostaria de ter o seu feedback.

Consultas de pesquisa compartilháveis

Se os filtros de pesquisa fizerem parte do URL, os usuários poderão marcar esses URLs e até mesmo compartilhá-los com os amigos. O compartilhamento era importante para nós, já que estávamos adicionando a opção de compartilhar os destaques publicamente também. Assim, todas as entradas de pesquisa por usuário foram tratadas no front-end e o URL foi atualizado de acordo.

Procurar

Ativando filtros de pesquisa reais

Como na verdade não estávamos filtrando com base nas palavras-chave inseridas, também tivemos que alterar a redação. Utilizou-se o prefixo antes do nome do campo para transmitir que estávamos realmente fazendo uma busca dentro do campo.

Enquanto a abordagem que fizemos melhorou a busca pelos usuários finais, deu origem a uma nova questão. Por exemplo, digamos que tenho milhares de destaques e quero filtrar minha pesquisa para que, estritamente, contenham uma tag, diga "drupal". Como ampliamos nossa pesquisa, também buscaríamos os registros em que o texto 'drupal' também está presente em notas ou url. Então, introduzimos uma nova palavra-chave de filtro com o prefixo has. Portanto, se você digitar hasTag: drupal na pesquisa, ele buscará apenas os registros que realmente contêm a tag drupal. Nós não expusemos esta opção agora. Este será um código de fraude para usuários profissionais por enquanto. Assim que descobrirmos a UX para adicionar isso, vamos adicioná-lo à interface do usuário.

Tal como o nosso produto, a nossa pesquisa está longe de estar completa. Mas nós estamos colocando isso para fora para que você possa usá-lo enquanto continuamos melhorando.

Texto original em inglês.