2016-04-26 4 views
5

Wir verwenden elastic4s für ElasticSearch 2.2.0. Eine Anzahl von Abfragen wird als JSON auf dem Datenträger gespeichert und als rawQuery über den Treiber elastic4s verwendet. Die Punktzahl im Ergebnis unterscheidet sich zwischen der Abfrage, die über die Befehlszeile oder dem Elastic4s-Treiber übermittelt wird. Der Treiber von elastic4s gibt für alle Ergebnisse immer den Wert 1 zurück, während die Ausführung der Befehlszeile zwei unterschiedliche Werte (für verschiedene Datentypen) ergibt.elastic4s: Ergebnis bleibt bei 1 mit rawQuery

Der Code für elastic4s:

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

Bitte beachte, dass ich alles andere als rawQuery preparedQuery entfernt und es die Partitur nicht ändern. Die vollständige Abfrage über die Kommandozeile ist ziemlich lang:

{ 
    "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 
             } 
            } 
           ] 
          } 
         } 
        ] 
       } 
      ] 
     } 
    } 
} 

Beachten Sie, dass dies fast preparedQuery ist aber für den Ersatz von $search mit der Suchanfrage. Der REST-Client für die elastische Suche gibt eine Punktzahl von 3.075806 für die Übereinstimmungen zurück.

+0

ist Wenn Sie Ergebnis Punktzahl sagen, das ist der pro-Punkt-Score? Was bedeutet "Der REST-Client für die elastische Suche gibt einen Wert von 3,075806 für die Übereinstimmungen zurück." bedeuten? – James

+0

Erhalten Sie genau die gleichen Ergebnisse durch elastic4s-Treiber und durch REST? – Val

+0

@James Der REST-Client für elastische Suche bedeutet, dass die elastische Suche direkt über Locken abgefragt wird. Val der Score ist unterschiedlich, 1 für elastic4s und 3.075806 für die Curl-REST-Abfrage. – TeTeT

Antwort

0

elastic4s rawQuery wickelt Ihren RawQuery-JSON in ein anderes Abfrageobjekt ein.

es ist wie Sie für

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

entfernen Sie einfach Ihre Einwickeln „query“ von Ihnen JSON und die Antwort wird zeigen, unterschiedlichen Partituren abfragen würde.

Alternativ können Sie versuchen, extraSource anstelle von rawQuery zu verwenden, wie in elastic4s docu beschrieben. obwohl es für mich überhaupt nicht funktionieren:

Errormessage: Wert extraSource kein Mitglied von com.sksamuel.elastic4s.SearchDefinition