2016-04-26 10 views
5

Używamy elastic4s dla ElasticSearch 2.2.0. Wiele zapytań jest przechowywanych jako JSON na dysku i używane jako rawQuery przez sterownik elastic4s. Wynik w wyniku różni się między zapytaniem przesłanym za pomocą wiersza poleceń lub sterownika elastic4s. Sterownik elastic4s zawsze zwraca wynik równy 1 dla wszystkich wyników, a wykonanie wiersza poleceń daje dwie różne wartości (dla różnych typów danych).elastic4s: wynik pozostaje na poziomie 1 z rawQuery

Kod dla 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 

Zauważ, że usunąłem wszystko ale rawQuery preparedQuery i nie zmienić wynik . Pełne zapytanie za pośrednictwem wiersza polecenia jest dość długa:

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

Należy pamiętać, że jest to niemal preparedQuery ale do zastąpienia $search z zapytaniem. Klient REST wyszukiwania elastycznego zwraca wynik za zgodność z wynikiem 3.075806.

+0

Kiedy mówisz wynik wynik, jest to wynik per-sprzęcie? Co oznacza "Klient REST elastycznego wyszukiwania zwraca wynik 3.075806 dla dopasowań." oznaczać? – James

+0

Czy uzyskujesz dokładnie takie same wyniki przez sterownik elastic4s i REST? – Val

+0

@James wyszukiwanie elastyczne klient REST oznacza zapytanie wyszukiwanie elastyczne bezpośrednio przez curl. Val wynik jest inny, 1 dla elastic4s i 3.075806 dla zapytania REST curl. – TeTeT

Odpowiedz

0

elastic4s rawQuery zawinie twój rawQuery-JSON w innym obiekcie zapytania.

to jak byś zapytać o

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

prostu usunąć zawijania „zapytania” od ciebie odpowiedź JSON i pokaże różne wyniki.

Alternatywnie można spróbować użyć extraSource zamiast rawQuery, jak opisano w dokumencie elastic4s. mimo to nie działa dla mnie w ogóle:

ErrorMessage: wartość extraSource nie jest członkiem com.sksamuel.elastic4s.SearchDefinition