2016-04-26 3 views
5

ElasticSearch 2.2.0にはelastic4sが使用されています。多くのクエリはディスク上にJSONとして保存され、elast4sドライバを使用してrawQueryとして使用されます。結果のスコアは、コマンドライン経由で送信されたクエリとelastic4sドライバとの間で異なります。 elastic4sドライバは、すべての結果に対して常にスコア1を返しますが、コマンドラインの実行によって2つの異なるスコアが得られます(異なるデータ型の場合)。elastic4s:rawQueryでスコアは1にとどまります

elastic4sのためのコード:私はrawQuery preparedQuery以外のものを取り出して、それがスコアを変更しなかった

val searchResult = client.execute { 
     search in indexName types(product, company, orga, "User", "Workplace") rawQuery preparedQuery sourceInclude(preparedSourceField:_*) sort {sortDefintions:_*} start start limit limit 
    }.await 

注意。コマンドラインを介して完全なクエリは非常に長いです:これはほとんどpreparedQueryが、検索クエリと$searchの交換のためのものであることを

{ 
    "query": { 
     "bool": { 
      "must": [ 
       { 
        "multi_match": { 
         "query": "${search}", 
         "fields": [ 
          "name", 
          "abbreviation", 
          "articleNumberManufacturer", 
          "productLine", 
          "productTitle^10", 
          "productSubtitle", 
          "productDescription", 
          "manufacturerRef.name", 
          "props" 
         ] 
        } 
       } 
      ], 
      "filter": [ 
       { 
        "or": [ 
         { 
          "bool": { 
           "must": [ 
            { 
             "type": { 
              "value": "Product" 
             } 
            }, 
            { 
             "term": { 
              "publishState": "published" 
             } 
            } 
           ], 
           "must_not": [ 
            { 
             "term": { 
              "productType": "MASTER" 
             } 
            }, 
            { 
             "term": { 
              "deleted": true 
             } 
            } 
           ] 
          } 
         } 
        ] 
       } 
      ] 
     } 
    } 
} 

注意。弾性検索RESTクライアントは、マッチのためにスコア3.075806を返します。

+0

のメンバーではないあなたが、結果スコアを言うとき、これは、アイテム単位のスコアですか? 「弾性検索RESTクライアントは一致のスコアを3.075806返します」とは何ですか?平均? – James

+0

elastic4sドライバとRESTを通して全く同じ結果が得られますか? – Val

+0

@James弾性検索RESTクライアントとは、カールによる弾性検索を直接クエリすることを意味します。 Valのスコアは異なります.1つはelastic4、1つはcurl RESTクエリで3.075806です。 – TeTeT

答えて

0

elastic4s rawQueryは、rawQuery-JSONを別のクエリオブジェクトにラップします。

あなたは自分のラップを削除あなたJSONと回答から「クエリ」は、様々なスコアが表示されます

{ "query": { "query": {  
    "bool": { 
     "must": [ 
      { 
       "multi_match": { 
        "query": "${search}", 
... 

を照会しまうようなものです。

また、elastic4s docuに記載されているように、rawQueryの代わりにextraSourceを使用することもできます。それがすべてで私のために動作しませんでしたが:

にErrorMessage: 値extraSourceをcom.sksamuel.elastic4s.SearchDefinition

関連する問題