2016-04-26 8 views
5

Stiamo usando elastic4s per ElasticSearch 2.2.0. Un numero di query viene memorizzato come JSON su disco e utilizzato come rawQuery tramite il driver elastic4s. Il punteggio nel risultato è diverso tra la query inviata tramite riga di comando o il driver elastic4s. Il driver elastic4s restituisce sempre il punteggio di 1 per tutti i risultati, mentre l'esecuzione della riga di comando produce due punteggi diversi (per diversi tipi di dati).elastic4s: il punteggio rimane a 1 con rawQuery

Il codice per 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 

Si noti che ho rimosso nulla, ma rawQuery preparedQuery e non ha cambiato il punteggio . La query full tramite la riga di comando è piuttosto lungo:

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

Si noti che questo è quasi preparedQuery ma per la sostituzione della $search con la query di ricerca. La ricerca elastica client REST restituisce un punteggio di 3.075806 per le partite.

+0

Quando si dice il punteggio risultato, è questo il punteggio per-articolo? Cosa significa "Il client REST di ricerca elastica restituisce un punteggio di 3.075806 per le partite." significare? – James

+0

Ottieni gli stessi esatti risultati tramite il driver elastic4s e tramite REST? – Val

+0

@James il client REST di ricerca elastica significa interrogare la ricerca elastica tramite ricciolo direttamente. Val il punteggio è diverso, 1 per elastic4s e 3.075806 per la query REST curl. – TeTeT

risposta

0

elastic4s rawQuery avvolgerà rawQuery-JSON in un altro oggetto di query.

E 'come si farebbe interrogare per

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

basta rimuovere il wrapping "query" da voi JSON e la risposta mostrerà punteggi variabili.

In alternativa, è possibile provare a utilizzare extraSource anziché rawQuery, come descritto in elastic4s docu. anche se non ha funzionato per me, a tutti:

ErrorMessage: valore extraSource non è membro di com.sksamuel.elastic4s.SearchDefinition