2016-01-22 79 views
0

我試圖修改來自imotov的餘弦相似性腳本Github。在他的腳本中,他的docWeightSum只採用查詢中術語的頻率(tf),而不是文檔中的所有術語。Elasticsearch本地腳本 - 評估索引文檔的字段值

以下面的例子。 docWeightSum將爲9(「I」4,「am」4,「Sam」1)。我想要的docWeightSum是10(爲「火腿」添加1),因爲我想用兩個向量的大小對點積進行歸一化。

DOC: 「我是我火腿山姆」

查詢: 「山姆我是」

所以其實我有2個問題,因爲我的索引文件到Elasticsearch這樣的:

POST /termscore/doc 
{ 
    "text": "I am am I ham", 
    "docWeightSum": 9 
} 
  • 是否有存在的API來獲取所有TF的平方和每個索引的文檔,或獲得TF在條款不在查詢中的文檔?如果不是,那我該如何計算這個和平方?
  • 如果我預先計算每個文檔的tf的和平方,並將其與文檔內容一起放入Elasticsearch中(如上例所示),那麼在計算分數時,如何訪問該「docWeightSum」值?

我使用Elasticsearch 1.7

感謝,

回答

0

要回答你的問題,這是可能的,但它是非常低效的計算docWeightSum在運行。因此,假設您預先計算了該值並將其索引到單獨的字段中,則可以使用doc lookup機制從本地腳本訪問這些值。如果你的計算不是很複雜,你可以通過在function_score查詢中使用field value factor得到,並避免完全編寫你自己的腳本。

說這個,我懷疑你問的是錯誤的問題。與其試圖將其實現爲評分腳本,我會建議考慮創建自己的自定義SimilarityProvider。您很可能會發現,大部分您正試圖將鞋拔入評分腳本的構造已經存在,並且更容易實施和使用。

+0

感謝您指出文檔查找機制。我會嘗試這種方式。 – user3685928