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是否提供了多维空间搜索的功能?
答案 0 :(得分:0)
Solr不支持此功能,但Lucene支持它。
答案 1 :(得分:0)
您可以使用Principal component analysis或T-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]]