在多维空间中找到与Solr最近的点

时间:2016-04-18 09:29:19

标签: 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中有一篇关于Spatial Search的文章。但他们只使用了2个维度。

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

2 个答案:

答案 0 :(得分:0)

Solr不支持此功能,但Lucene支持它。

https://www.elastic.co/blog/lucene-points-6.0

答案 1 :(得分:0)

您可以使用Principal component analysisT-distributed Stochastic Neighbor Embedding将5维空间缩小为2维表示,然后可以使用Solr查找数据集中任何点的最近邻居。

根据this question,看来t-SNE是最适合您的问题的选择。

有一个Python t-SNE tutorial here,但我认为这足以解决您的问题:

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]]