当前位置: 首页 > 软件库 > 程序开发 > 搜索引擎 >

DiskANN

基于图的近似近邻搜索索引
授权协议 MIT
开发语言 C/C++
所属分类 程序开发、 搜索引擎
软件类型 开源软件
地区 不详
投 递 者 庞安晏
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

DiskANN 的目标是构建可扩展、高性能且具有成本效益的近似最近邻搜索算法。该项目采用了 Microsoft 开放源代码行为准则。

Linux 构建:

通过 apt-get 和 Intel MKL 安装以下软件包,方法是下载安装程序或使用 apt

sudo apt install cmake g++ libaio-dev libgoogle-perftools-dev clang-format-4.0 libboost-dev

构建

mkdir build && cd build && cmake .. && make -j 

Windows 构建:

Windows 版本已经过 Visual Studio 2017 和 Visual Studio 2019 的企业版测试。它应该也适用于社区版和专业版,无需任何更改。

先决条件:

  • 从 https://cmake.org 安装 CMAKE(v3.15.2 或更高版本)

  • 从 https://software.intel.com/en-us/mkl 安装 MKL

  • 从 https://www.boost.org 安装/下载 Boost

  • 环境变量:

    • 将名为 INTEL_ROOT 的新系统环境变量设置到 MKL 安装下的“windows”文件夹(例如,如果您的安装文件夹是“C:\Program Files (x86)\IntelSWtools”,请将 INTEL_ROOT 设置为“C:\Program Files” (x86)\IntelSWtools\compilers_and_libraries\windows")
    • 将环境变量 BOOST_ROOT 设置为您的 boost 文件夹。

构建步骤:

  • 打开一个新的命令提示符窗口
  • 在 diskann 下创建一个“build”目录
  • 切换到“build”目录并运行
<full-path-to-cmake>\cmake -G "Visual Studio 16 2019" -B. -A x64 ..

或者

<full-path-to-cmake>\cmake -G "Visual Studio 15 2017" -B. -A x64 ..

注意:由于 VS 自带(较旧)版本的 cmake,您必须指定 cmake 的完整路径以确保使用正确的版本。

  • 这将在“build”目录中创建一个“diskann”解决方案文件
  • 打开“diskann”解决方案并构建“diskann”项目。
  • 然后使用作为解决方案一部分的 ALL_BUILD 项目构建所有其他二进制文件
  • 生成的二进制文件存储在 diskann/x64/Debug 或 diskann/x64/Release 目录中。

要从命令行构建,请转到“build”目录并使用 msbuild 首先构建“diskpriority_io”和“diskann_dll”项目。然后构建整个解决方案,如下所示。

msbuild src\dll\diskann.vcxproj
msbuild diskann.sln

检查 msbuild 文档以获取其他选项,包括在调试和发布版本之间进行选择。

用法:

我们现在详细介绍主要二进制文件,使用它们可以构建和搜索驻留在内存中的索引以及驻留在 SSD 中的索引。

  • 个人主页:mzwang.top 论文信息 题目:DiskANN: Fast Accurate Billion-point Nearest Neighbor Search on a Single Node 作者:Suhas Jayaram Subramanya, Devvrit, Rohan Kadekodi, Ravishankar Krishaswamy, Harsha Vardhan Simh

 相关资料
  • 问题内容: 应用程序如何执行邻近搜索?例如,用户输入邮政编码,然后应用程序按距离排序列出20英里内的所有企业。 我想在PHP和MySQL中构建类似的东西。这种方法正确吗? 获取我感兴趣的位置的地址并将其存储在数据库中 使用Google的地理编码服务对所有地址进行地理编码 编写包含Haversine公式的数据库查询以进行邻近搜索和排序 这个可以吗?在第3步中,我将计算每个查询的接近度。有一个PROX

  • 本文向大家介绍solr 邻近搜索,包括了solr 邻近搜索的使用技巧和注意事项,需要的朋友参考一下 示例 name:"john doe"~1 搜索特定术语距离(〜1)内的多个术语,i.e将查找包含john匿名doe而不包含john第二名doe的文本

  • 问题内容: 我只是在寻找有关最佳方法的建议… 我需要创建一个搜索功能,以在邮政编码的50英里半径内搜索“用户”。我有一个邮政编码表,其中包含所有美国邮政编码及其纬度/经度,但我只是想找出构造和查询数据的最佳方式… 是否应在用户表中添加纬度/经度列,并在给定邮政编码范围内的所有用户查询它?还是应该在邮政编码表中查询半径范围内的所有邮政编码,然后在用户表中查询所有具有结果(邮政编码)的用户?要么… ?

  • 利用 Google API 实现搜索附近商店、银行、学校等等POI。点击地点的标注(Annotation)会有弹出气泡视图的动画效果。需申请自己的API Key 进行替换使用,详见官方文档:https://developers.google.com/places/documentation/ 。 [Code4App.com]

  • 问题内容: Lucene的手册已经清楚地解释了对包含两个单词的短语进行接近搜索的含义,例如 但是,我想知道搜索到底能做什么?是否允许相邻的单词最多相隔10个单词,或者所有的单词对都是这样? 谢谢! 问题答案: 斜率(接近度)的作用类似于编辑距离(请参阅参考资料)。因此,这些条款可以重新排序或添加额外的条款。这意味着接近度将是添加到整个查询中的最大术语数。那是: 将匹配: “雅加达lucene ap

  • k近邻(k-Nearest Neighbors)采用向量空间模型来分类,是一种常用的监督学习方法。它的工作原理为:给定测试样本,基于某种距离度量找出训练集中与其最靠近的k个训练样本,然后基于这k个“邻居”的信息来进行预测。通常,在分类任务中可使用“投票法”,即选择这k个样本中出现最多的类别标记作为预测结果;在回归任务中可使用“平均法”,即将这k个样本的实值输出标记的平均值作为预测结果;还可基于距离

  • 附近地点搜索 题目详情 找一个点集中与给定点距离最近的点,同时,给定的二维点集都是固定的,查询可能有很多次,时间复杂度O(n)无法接受,请设计数据结构和相应的算法。 分析与解法 此题是去年微软的三面题,类似于一朋友@陈利人出的这题:附近地点搜索,就是搜索用户附近有哪些地点。随着GPS和带有GPS功能的移动设备的普及,附近地点搜索也变得炙手可热。在庞大的地理数据库中搜索地点,索引是很重要的。但是,我

  • 问题内容: 在我的Rails应用程序中,我具有允许查找与当前登录用户最接近的用户的功能。我为此使用了Geocoder gem。在用户模型中,我具有如下范围: 这非常有效,但是对于大量用户而言却很慢。当我调用此作用域时,它将生成以下sql查询: 我正在尝试为此创建索引,但它们不起作用。我正在尝试以下组合: 我应该如何添加索引以加快此查询的速度? 编辑:我忘记添加我的纬度和经度列是小数。 此查询的AN