2017-04-06 59 views
0

我試圖在僅由數字字段表示的elasticsearch中存儲對象。在我的情況下,每個對象都有300個浮動字段和1個ID字段。我已將id字段設置爲not_analyzed。我可以將文檔存儲在ES中。索引文件僅與elasticsearch中的數字字段

"_index": "smart_content5", 
    "_type": "doc2vec", 
    "_id": "AVtAGeaZjLL5cvd8z9y7", 
    "_score": 1, 
    "_source": { 
     "feature_227": 0.0856793, 
     "feature_5": -0.115823, 
     "feature_119": -0.0379987, 
     "feature_145": 0.17952, 
     "feature_29": 0.0444945, 

但現在我想運行一個查詢表示相同的300個字段,但不同的數值(當然)。現在我想查找其300個字段與此查詢字段「最相似」的文檔。 所以這就像做了餘弦相似性,但我正在嘗試使用ES來做到這一點,以便它快速。

(1)首先,是否有可能做我正在做的事? (2)其次,我已經探索了ES的function_score功能,並嘗試使用它,但它返回的最大匹配分數爲0.0!

任何有關我應該使用什麼以及我在[2]中可能會做錯什麼的意見。

回答

1

我覺得你還是需要function_score但這樣的(它的工作對我來說):

{ 
    "query": { 
    "function_score": { 
     "query": {}, 
     "functions": [ 
     { 
      "gauss": { 
      "feature_227": { 
       "origin": "0", 
       "scale": "0.5" 
      } 
      } 
     }, 
     { 
      "gauss": { 
      "feature_5": { 
       "origin": "0", 
       "scale": "0.5" 
      } 
      } 
     }, 
     { 
      "gauss": { 
      "feature_119": { 
       "origin": "0", 
       "scale": "0.5" 
      } 
      } 
     }, 
     { 
      "gauss": { 
      "feature_145": { 
       "origin": "0", 
       "scale": "0.5" 
      } 
      } 
     }, 
     { 
      "gauss": { 
      "feature_29": { 
       "origin": "0", 
       "scale": "0.5" 
      } 
      } 
     } 
     ], 
     "score_mode": "sum" 
    } 
    } 
} 
+0

當我試圖做到這一點,我得到以下錯誤:原因=「%R」%自我。信息['error'] ['root_cause'] [0] ['reason'] TypeError:字符串索引必須是整數 –

+0

當我從「origin」和「scale」的值中刪除雙引號時, –

+0

有趣。我使用5.3測試了這一點,並從Kibana開發工具發送了查詢。 –

相關問題