A Algolia é uma poderosa solução de busca como serviço que impulsiona a pesquisa para as principais marcas do mundo em diversas verticais. A integração com a Algolia utiliza os atributos de envolvimento do usuário perspicazes da Dynamic Yield e insights impulsionados por aprendizado de máquina, adicionando uma camada de personalização à Algolia.
Caso de uso
Personalize os resultados da pesquisa para fornecer a melhor correspondência para cada visitante (com base na afinidade).
A personalização é habilitada ao considerar a afinidade do usuário da Dynamic Yield nos resultados da pesquisa.
Pré-requisitos
- Uma conta na Dynamic Yield e uma conta na Algolia. Cada conta é vendida e gerenciada separadamente.
- Um feed de produtos da Dynamic Yield. Feeds multilíngues não são suportados.
Injetando afinidade: Como funciona
- Crie uma campanha de código personalizado, e segmente todas as páginas que estão servindo a Algolia.
- Adicione uma variação e cole o código apropriado. Consulte exemplos de código.
- Salve a Ação Personalizada.
A Ação Personalizada expõe um objeto chamado DY.CS.affinityToAlgolia que contém a Afinidade da Dynamic Yield no formato Algolia para injetar filtros opcionais.
Quando você inicializa a API Algolia:
- Adicione a chave optionalFilters ao objeto.
- Atribua o objeto DY.CS.affinityToAlgolia como um valor.
Exemplos de código
index.search({
"query" : {
optionalFilters: DY.CS.affinityToAlgolia
}).then(res => {
// console.log(res);
});
var userId = DYO.StorageUtils.get('_dyid','localStorage');
var dyHost = DYO.hosts.rcom;
window.DY.CS = window.DY.CS || {};
getAffinity(DY.scsec, userId, 2)
function getAffinity(section,userId,limit){
var xhr = new XMLHttpRequest();
xhr.open('GET', dyHost + '/userAffinities?limit='+limit+'&sec='+section+(userId?'&uid='+userId:""));
xhr.onload = function() {
if (xhr.status === 200) {
console.log('got user affinity : ' +xhr.responseText);
DY.CS.affinityAlgolia = DYAffinityToAlgoliaFilter(JSON.parse(xhr.responseText));
}
else {
console.log('error getting affinity');
}
};
xhr.send();
}
function DYAffinityToAlgoliaFilter(affinities){
var filter = [];
if (affinities !== {}){
for (var affinity in affinities){
for (var val in affinities[affinity]){
filter.push(affinity+":"+val+"<score="+affinities[affinity][val]+">")
}
}
}
return filter;
}
Solução de problemas da integração Algolia
Certifique-se de que o objeto DY.CS.affinityToAlgolia está definido no navegador e está sendo preenchido corretamente com dados:
- Visualize várias PDPs e adicione itens ao carrinho para construir a afinidade do usuário.
- Navegue até uma página que sirva a Algolia, abra o console de ferramentas de desenvolvedor e insira DY.CS.affinityToAlgolia. Isso retorna uma matriz com as afinidades que você construiu e suas pontuações associadas
- Se a resposta esperada não for retornada, faça o seguinte:
- Verifique se a campanha de código personalizado está ativa, se está segmentando as páginas corretas e se inclui o código correto.
- Verifique se você construiu corretamente a afinidade do usuário executando o API de Afinidade do Usuário do lado do cliente. . Se a resposta retornar seus dados de afinidade do usuário, esta parte da implementação está funcionando corretamente.
Valide a chamada de rede da Algolia:
- Navegue até uma página que sirva a Algolia, abra o console de ferramentas de desenvolvedor e vá para a guia Rede.
- Digite "Algolia" no filtro de rede e execute uma consulta de pesquisa no site.
- Nos resultados, procure por uma chamada de rede que comece com "query?x-algolia-agent" e selecione-a. Esta é a chamada que seu site faz para a Algolia com os critérios de pesquisa.
- Na carga da chamada de rede, localize o parâmetro optionalFilters nos dados do formulário. Este parâmetro passa a afinidade do usuário da Dynamic Yield para a Algolia em um formato ingestível.
- Se o parâmetro não existir, implemente a injeção de código de afinidade do usuário conforme o exemplo na seção Exemplos de código .
- Se o parâmetro existir com os dados de afinidade do usuário, esta parte da implementação está funcionando corretamente.