Qual é a melhor abordagem para criar uma interface de usuário de pesquisa facetada para o ElasticSearch?

Não sei exatamente o que você está procurando, mas aqui está a abordagem que adotamos na EDITD ao criar a interface do nosso produto (ainda em desenvolvimento).

Nossa ferramenta é uma ferramenta de análise para a indústria da moda. O ElasticSearch fornece todos os nossos requisitos de consulta em tempo real, portanto, a maior parte da interface fala com um servidor que emite as consultas do ElasticSearch. Na verdade, ele não está vinculado ao ES, pois existe uma API que o envolve, mas a abordagem pode ser útil para você.

Temos vários filtros, classificações e controles, como no exemplo do FacetView, que se traduz em consultas ES posteriormente. Também temos várias visualizações que exibem os dados; optamos por implementar nossas visualizações usando as visualizações Backbone, mas enriquecendo-as com os recursos de busca de dados.

Também fornecemos a cada visualização um objeto Session (que é semelhante a um modelo de Backbone) que contém a sessão atual (estado) da visualização, ou seja, quais parâmetros de consulta estão definidos para essa visualização. Há também uma sessão global para a página atual em que você está. O objeto Session é reativo, ou seja, invalida um conjunto de funções quando as teclas são alteradas, adicionadas ou removidas.

Quando um filtro ou classificação da interface do usuário altera o valor, o novo valor é definido na Sessão global, que faz com que todas as Sessões de exibição definam essa chave, que faz com que as exibições sejam renderizadas novamente. O motivo dessa hierarquia de sessões de dois níveis é que ela permite que as exibições tenham seus próprios filtros individuais que não afetam nenhuma outra exibição, em contraste com os controles globais que afetam toda a página.

Existem vários fluxos possíveis para criar pesquisa facetada usando o ES. Eu usei os recursos de pesquisa, filtro e agregação de ES, como abaixo:

  1. Uma barra de pesquisa com o recurso de pesquisa de digitação antecipada. Todas as sugestões (junto com a categoria a que pertencem) mostradas para a pesquisa de digitação antecipada são apenas de dados indexados. Supondo que os usuários finais sejam ingênuos na criação de consultas de pesquisa, também escrevi apis de invólucro em vez de apis de ES para fornecer sugestões possíveis ao usuário final para a criação de consultas booleanas.

Vamos dar um exemplo de site de recrutamento: se o usuário digitar “Ja” mostrar as sugestões possíveis como “Java: Skill”, “Java 1.4: Skill”, “Core Java: Java”, “Java: Location”

Suponha que o usuário selecione “Java: Skill” e digite “a”; a interface do usuário deve poder fazer a consulta como “Java: skill AND” e permitir que o usuário digite outras palavras-chave. Da mesma forma, “n” pode ser expandido para “NÃO” e assim por diante. Isso facilita a criação de consultas booleanas para o usuário.

2. Depois que o usuário clica no botão de pesquisa, para a consulta bool de entrada, disparamos duas consultas separadas para o ES. A primeira consulta retorna apenas candidatos correspondentes. A segunda consulta retorna o atributo facetado com a contagem. Isso nos ajuda a carregar páginas mais rapidamente.

3. Na exibição facetada, mostramos os 5 principais valores para cada atributo. Também fornecemos uma pesquisa de digitação antecipada para cada atributo mostrado na visualização facetada. Isso ajuda os usuários a encontrar e criar uma consulta bool a partir da exibição facetada.

4. Também temos a opção de expandir, ocultar e recolher na visualização facetada para cada atributo mostrado. Isso dá aos usuários maior controle para criar consultas booleanas e detalhar mais rapidamente os registros que eles procuram.

5. Na exibição facetada, uma consulta booleana OR é criada para valores selecionados em um atributo e uma consulta booleana AND criada entre os atributos selecionados.

6. O usuário também pode salvar a consulta.

7. Também armazenamos todas as consultas digitadas ou executadas pelo usuário. Portanto, quando ele voltar a procurar candidatos, recomendamos consultas de consultas executadas anteriormente. Para recomendação, consideramos as consultas executadas por ele e por outros usuários. Mais peso é dado às consultas realizadas por ele.

8. Como um processo offline, todas as consultas são analisadas e analisadas para cada usuário. E os metadados são criados e armazenados. Usamos esses metadados para recomendar as possíveis consultas e também para impulsionar os resultados da pesquisa.