2017-02-01 17 views
0

私は、ユーザーのデータベースでelasticsearchを使用しています。各ユーザーには複数のジョブがあり、各ジョブにはキャリアIDがあります。 私は、特定のジョブを持つユーザーを見つけるために、次のクエリを使用しています:elasticsearchの頻度に基づいてスコアを付ける方法

"explain": true, 
"query": { 
    "bool": { 
     "should": [ 
      { 
       "bool": { 
        "must": [ 
         { 
          "term": { 
            "positions.career.id": { 
            "value": 31 
           } 
          } 
         } 
        ] 
       } 
      } 
     ], 
     "minimum_number_should_match": 1 
    } 
} 

しかし、このクエリはすべての結果に彼らが彼らの位置の少なくとも一方でそのキャリアを持って示す1のスコアを与えます。

私はユーザーの位置の数を反映するためにスコアが必要です。

elasticsearchでこれを行う方法はありますか?

答えて

0

elasticsearchの高度なスコアリングモジュールを使用してインデックスレベルのスコアリング属性にアクセスし、用語頻度に基づいてドキュメントにスコアを付けることができます。

Official documentation

グルーヴィー

POST index_name1/test_type 
{ 
    "title" : "harley harley harley", 
    "nested_one" : [{ 
    "some_id" : 78 
    }, 
    { 
    "some_id" : 80 
    },{ 
    "some_id" : 100 
    }], 
    "nested_two" : [{ 
    "some_id" : 79 
    }, 
    { 
    "some_id" : 80 
    },{ 
    "some_id" : 101 
    }] 
} 

POST index_name1/test_type 
    { 
     "title" : "harley harley", 
     "nested_one" : [{ 
     "some_id" : 78 
     }, 
     { 
     "some_id" : 80 
     },{ 
     "some_id" : 100 
     }], 
     "nested_two" : [{ 
     "some_id" : 79 
     }, 
     { 
     "some_id" : 80 
     },{ 
     "some_id" : 101 
     }] 
    } 

POST index_name1/_search 
{ 
    "query": {"function_score": { 
    "query": {"match_all": {}}, 
    "functions": [ 
     {"script_score": { 

     "script": "_index['title']['harley'].tf()" 
     }} 
    ] 
    }} 
} 
をES 2.4.1についてelasticsearch

に周波数に基づいてスコアをfunction scoreスクリプトスコアクエリ内で使用し、デフォルトのスクリプト言語することができます上記のクエリの応答であります。

{ 
    "took": 173, 
    "timed_out": false, 
    "_shards": { 
    "total": 5, 
    "successful": 5, 
    "failed": 0 
    }, 
    "hits": { 
    "total": 3, 
    "max_score": 3, 
    "hits": [ 
     { 
     "_index": "index_name1", 
     "_type": "test_type", 
     "_id": "AVn9aDOUKkYhaW9Iz5wL", 
     "_score": 3, 
     "_source": { 
      "title": "harley harley harley", 
      "nested_one": [ 
      { 
       "some_id": 78 
      }, 
      { 
       "some_id": 80 
      }, 
      { 
       "some_id": 100 
      } 
      ], 
      "nested_two": [ 
      { 
       "some_id": 79 
      }, 
      { 
       "some_id": 80 
      }, 
      { 
       "some_id": 101 
      } 
      ] 
     } 
     }, 
     { 
     "_index": "index_name1", 
     "_type": "test_type", 
     "_id": "AVn9aBQGKkYhaW9Iz5wJ", 
     "_score": 2, 
     "_source": { 
      "title": "harley harley", 
      "nested_one": [ 
      { 
       "some_id": 78 
      }, 
      { 
       "some_id": 80 
      }, 
      { 
       "some_id": 100 
      } 
      ], 
      "nested_two": [ 
      { 
       "some_id": 79 
      }, 
      { 
       "some_id": 80 
      }, 
      { 
       "some_id": 101 
      } 
      ] 
     } 
     }, 
     { 
     "_index": "index_name1", 
     "_type": "test_type", 
     "_id": "AVn9aBhlKkYhaW9Iz5wK", 
     "_score": 2, 
     "_source": { 
      "title": "harley harley", 
      "nested_one": [ 
      { 
       "some_id": 78 
      }, 
      { 
       "some_id": 80 
      }, 
      { 
       "some_id": 100 
      } 
      ], 
      "nested_two": [ 
      { 
       "some_id": 79 
      }, 
      { 
       "some_id": 80 
      }, 
      { 
       "some_id": 101 
      } 
      ] 
     } 
     } 
    ] 
    } 
} 

希望します。

関連する問題