2015-05-08 29 views
2

如何(如果可能的話)能夠在ElasticSearch索引中插入任何term-vector?ElasticSearch中的用戶定義的termvector

ES在幕後爲了執行文本挖掘任務而計算術語向量,但它能夠替代地輸入(術語,權重)對的任何列表是有用的。

爲什麼?例如,儘管ES使k = 2的kNN(k-最近鄰居),在地理鄰近度的情況下,它不具有任何明確的k> 2功能性。如果我們能夠插入我們自己的術語向量,我們可以通過利用ES內置的文本索引方法來破解k> 2的功能。

在這個問題上的任何跡象?

回答

0

據我所知,elasticsearch沒有辦法做到這一點(我仍然在尋找最快的KNN實時搜索方法,elasticsearch是我的選擇之一)。

Elasticsearch基於倒排索引,因此術語向量(可能來自一個句子)中的每個術語將在已排序的列表中編入索引。當我們搜索查詢時,查詢將被分析爲一個詞向量,並且elasticsearch(實際上是lucene)將搜索每個詞的索引。

但KNN需要計算兩個向量之間的距離,即使它們不共享相同的項,傳統的倒排索引也不是爲此設計的。

正如你所說,elasticsearch可以實現實時KNN搜索時通過地理查詢K = 2,但我不認爲它可以支持K> 2

順便說一句,如果你發現任何可能有助於實現實時KNN搜索的方法,K可能是一個非常大的數字(100000?)和龐大的數據集(向量數),請告訴我,thx :)