2017-04-06 2 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)次に、私はfunction_scoreのESの機能を試してみましたが、これを試しましたが、最大一致スコアは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」%自己。文字列のインデックスが整数でなければなりません –

+0

"origin"と "scale"の値から二重引用符を削除するとこのエラーは発生しません。 –

+0

興味深い。私はこれを5.3でテストし、Kibana開発ツールからクエリを送信しました。 –

関連する問題