VectorsInSearch
1.0.0
用于实现以下演讲中讨论的想法的 Dice.com 代码:
这扩展了我早期关于“概念搜索”的工作,可以在这里找到 - https://github.com/DiceTechJobs/ConceptualSearch(包括幻灯片和视频链接)。在本次演讲中,我提出了多种使用倒排索引大规模搜索向量的不同方法。这实现了近似 k 最近邻搜索的方法,包括:
并描述了如何在倒排索引中有效地实现和查询这些想法。
更新:在与 LucidWorks 的 Trey Grainger 和 Erik Hatcher 交谈后,他们建议使用术语频率代替有效负载来解决我将术语权重嵌入到索引中并使用特殊的有效负载感知相似性函数(这也不需要)的解决方案。有效负载会导致严重的性能损失。这样做的挑战是负权重,我认为不可能对负词频率进行编码,但这可以通过为正权重标记和负权重标记使用不同的标记来解决,并在查询时进行类似的调整(其中负提升可以根据需要在 Solr 中应用)。
Lucene 文档:Lucene 定界词频过滤器
最近还有一个适用于此处的 Lucene 核心更新,并且在撰写本文时很快就会进入 Elastic 搜索:Block Max WAND。对于大型布尔 OR 查询,这会显着加快速度,您不需要知道结果的确切数量,而只关心尽快获得前 N 个结果。我在这里讨论的所有方法都会生成相对较大的 OR 查询,因此这是非常相关的。我还读到,当前的最小应该匹配实现也包括类似的优化,因此使用适当的 mm 设置可能已经获得了相同的性能增益,我已经在代码中进行了试验。
激活 2018: “搜索向量”
Haystack 2019: “用向量搜索”
Simon Hughes(Dice.com 首席数据科学家)