3

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的文章。但他们只使用二维。

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

4

2 回答 2

1

您可以使用主成分分析T 分布随机邻居嵌入将 5 维空间缩减为 2 维表示,然后您可以使用 Solr 为数据集上的任何点找到最近的邻居。

根据这个问题,t-SNE 似乎是最适合您的问题的选项。

这里有一个Python 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]]
于 2018-11-11T11:29:51.050 回答
0

这在 Solr 中不受支持,但在 Lucene 中受支持。

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

于 2017-07-20T13:49:28.340 回答