1. 问题现象
index = hnswlib.Index(space = '100', dim = 512)
index.init_index(max_elements = 100, ef_construction = 200, M = 16)
# Insert this single entry
index.add_items(dd, np.asarray([10000]))
index.set_ef(200)
labels, distances = index.knn_query(dd, k = 3)
在使用 hnswlib
库进行搜索匹配时有以下错误
RuntimeError: Cannot return the results in a contigious 2D array. Probably ef or M is to small
2. 问题原因
搜索算法无法找到 k=3 个邻居,因为库中只有一个元素,所以这会触发异常。我们在下面的代码中查询配置时使用了 k = 3 的参数。
labels, distances = index.knn_query(dd, k = 3)
3. 解决方法
- 捕获该异常,并将库中的
cur_idx
返回,即如果要查询前 3 个元素,那么库中只有一个元素时,捕获该异常,并返回这 1 个元素。 - 往库中添加多余 3 个的特征,这样就可以正常返回了。