Código Dice.com para implementar as ideias discutidas nas seguintes palestras:
Isso amplia meu trabalho anterior sobre 'Pesquisa conceitual', que pode ser encontrado aqui - https://github.com/DiceTechJobs/ConceptualSearch (incluindo slides e links de vídeo). Nesta palestra, apresento diversas abordagens diferentes para pesquisar vetores em escala usando um índice invertido. Isso implementa abordagens para pesquisa aproximada de k-vizinho mais próximo, incluindo:
e descreve como essas ideias podem ser implementadas e consultadas de forma eficiente em um índice invertido.
ATUALIZAÇÃO: Depois de conversar com Trey Grainger e Erik Hatcher da LucidWorks, eles recomendaram o uso de frequência de termo no lugar de cargas úteis para as soluções onde incorporo pesos de termo no índice e uso uma função especial de similaridade com reconhecimento de carga útil (que também não seria necessária). As cargas incorrem em uma penalidade significativa de desempenho. O desafio com isso são os pesos negativos, presumo que não seja possível codificar frequências de termos negativos, mas isso pode ser contornado tendo tokens diferentes para tokens ponderados positivos e negativos e fazendo ajustes semelhantes no momento da consulta (onde aumentos negativos podem ser aplicado no Solr conforme necessário).
Documentação Lucene: Filtro de frequência de termo delimitado Lucene
Também houve uma atualização recente no núcleo do Lucene que é aplicável aqui e que em breve chegará à pesquisa do Elastic no momento da escrita: Block Max WAND. Isso produz uma aceleração significativa para grandes consultas OR booleanas, nas quais você não precisa saber o número exato de resultados, mas apenas se preocupa em obter os N resultados principais o mais rápido possível. Todas as abordagens que discuto aqui geram consultas OR relativamente grandes e, portanto, isso é muito relevante. Também li que a implementação atual do mínimo deve corresponder também inclui otimizações semelhantes e, portanto, o mesmo tipo de ganho de desempenho já pode ser alcançado usando configurações mm apropriadas, algo que eu já estava experimentando em meu código.
Ativar 2018: ‘Vetores em Pesquisa’
Palheiro 2019: 'Pesquisando com Vetores'
Simon Hughes (cientista-chefe de dados, Dice.com)