在多维空间中用Solr求n个最近点

在多维空间中用Solr求n个最近点,solr,nearest-neighbor,n-dimensional,Solr,Nearest Neighbor,N Dimensional,Solr专家们,我真的很感谢你们对我的问题提出一些建议 我想用Solr建立一个多维空间,比如说5维空间。在这个空间中,应该有点,例如 P1 (0.3, 0.3, 0.3, 0.3, 0.3) P2 (0.5, 0.5, 0.5, 0.5, 0.1) P3 (0.5, 0.1, 0.1, 0.1, 0.1) 现在我想找到离给定点最近的点,例如 Px (0.5, 0.5, 0.5, 0.5, 0.5) 我试图找到有关多维空间搜索的可靠信息。但是我找不到任何有用的东西 在Solr Wiki中有一篇

Solr专家们,我真的很感谢你们对我的问题提出一些建议

我想用Solr建立一个多维空间,比如说5维空间。在这个空间中,应该有点,例如

P1 (0.3, 0.3, 0.3, 0.3, 0.3)
P2 (0.5, 0.5, 0.5, 0.5, 0.1)
P3 (0.5, 0.1, 0.1, 0.1, 0.1)
现在我想找到离给定点最近的点,例如

Px (0.5, 0.5, 0.5, 0.5, 0.5)
我试图找到有关多维空间搜索的可靠信息。但是我找不到任何有用的东西

在Solr Wiki中有一篇关于。但在那里,他们只使用2维


所以我的问题是:Solr是否提供了多维空间搜索的功能?

Solr不支持这一功能,但Lucene支持这一功能

您可以使用或将5维空间缩减为二维表示,然后可以使用Solr查找数据集上任何点的最近邻

根据,t-SNE似乎是最适合您的问题的选择

有一个解决方案,但我认为这足以解决您的问题:

from sklearn.manifold import TSNE
X = np.array([ [0.3, 0.3, 0.3, 0.3, 0.3], [0.5, 0.5, 0.5, 0.5, 0.1], [0.5, 0.1, 0.1, 0.1, 0.1], [0.5, 0.5, 0.5, 0.5, 0.5] ])
reduced_points = TSNE(n_components=2, random_state=0, angle=.99, init='pca').fit_transform(X)
reduced_points = [ [int(x[0]*100), int(x[1]*100)] for x in reduced_points ]
然后在二维空间中得到你的点

>>> reduced_points
[[-21020, 2023], [-12745, -16097], [-2899, 10298], [5375, -7822]]

我不认为Solr能处理二维以上的任何事情。但它可以处理表达式,你可以尝试在N维空间中找到最近邻的多种方法中的一种,以使solr能够理解,但我认为它不会很快工作。我能看到它工作的唯一其他方法是将5个维度划分为20个字段作为距离,然后找到所有字段总和最小的字段。我担心Solr无法提供该功能。我认为将5个维度划分为排列的建议无法满足我们关于性能的要求。不过,感谢您宝贵的回答。这在lucene中得到了支持。我仍在想如何在solr中做到这一点。