2015-06-14 14 views
5

Attualmente sto cercando di costruire questa query punteggio funzione con le API Java di elasticsearch:elasticsearch API Java Funzione Score query con la funzione di geo e il tempo gauss

{ 
    "query": { 
     "function_score": { 
     "functions": [ 
      { 
       "gauss": { 
        "location": { 
        "origin": { 
         "lat": 52.55, 
         "lon": 13.69 
        }, 
        "offset": "30km", 
        "scale": "10km", 
        "decay": 0.9 
        } 
       } 
      }, 
      { 
       "gauss": { 
        "createdAt": { 
        "origin": "2015-06-14T15:50:00", 
        "scale": "8h", 
        "offset": "4h", 
        "decay": 0.75 
        } 
       } 
      } 
     ] 
     } 
    } 
} 

Ma non riesco a trovare alcuna documentazione in merito alla Java API e query sulla funzione. Questo è quello che ho finora:

elasticsearch.client 
    .prepareSearch(config.offerIndex.value) 
    .setQuery(
    QueryBuilders.functionScoreQuery(
     ScoreFunctionBuilders 
     .gaussDecayFunction("location", ???, ???).setDecay(0.9) 
    ) 
) 

Il secondo e il terzo parametro del gaussDecayFunction sono chiamati origine e la scala. Ma hanno qualsiasi tipo e non ho idea di come devo fornire i miei valori di posizione e ora lì. E la prossima domanda è come posso fornire alle funzioni nel Builder di FunctionScore

risposta

6

Ho trovato questa soluzione, ma non sono sicuro se questo è il modo pulito per farlo. Apprezzeremmo se qualcuno potesse approvarlo.

val lat = 52.52 
val lon = 13.402 

QueryBuilders 
    .functionScoreQuery(
    ScoreFunctionBuilders.gaussDecayFunction("location", new GeoPoint(lat, lon), "10km") 
     .setDecay(0.9) 
     .setOffset("30km")) 
    .add(
    ScoreFunctionBuilders.gaussDecayFunction("createdAt", new DateTime(), "8h") 
     .setDecay(0.75) 
     .setOffset("4h")) 
) 
Problemi correlati