ElasticSearch

时间:2015-05-08 08:31:13

标签: elasticsearch knn

如何(如果可能的话)可以在ElasticSearch索引中插入任何term-vector?

ES在幕后计算术语向量,以便执行它的文本挖掘任务,但是能够输入任何(术语,权重)对的列表将是有用的。

为什么?

嗯,例如,虽然ES为k = 2启用kNN(k-最近邻居),但在地理邻近的情况下,它没有任何明确的k> 2功能。如果我们能够插入自己的术语向量,我们可以通过利用ES内置的文本索引方法来破解k> 2功能。

有关此问题的任何迹象吗?

1 个答案:

答案 0 :(得分:0)

据我所知,弹性搜索没有办法做到这一点(我仍在寻找最快的KNN实时搜索方法,弹性搜索是我的选择之一)。

Elasticsearch基于倒排索引,因此术语向量中的每个术语(可能来自一个句子)将在排序列表中编入索引。当我们搜索查询时,查询将被分析为术语向量,而弹性搜索(实际上是lucene)将搜索每个术语的索引。

但KNN需要计算两个向量之间的距离,即使它们不共享相同的项,传统的反向索引也不是为此要求而设计的。

正如您所说,弹性搜索可以通过地理查询实现k = 2时的实时KNN搜索,但我不认为它可以支持k> 2。

顺便说一下,如果你找到任何方法可以帮助实现实时KNN搜索K可能是一个非常大的数字(100000?)和一个庞大的数据集(向量的数量),请告诉我,thx :)