2013-03-20 14 views
5

Solr FunctionQuery ha una funzione DIV (x, y). Ho una tale necessità se y = 0, allora y dovrebbe essere uguale a x.Solr FunctionQuery: gte, lte, eq functions

In altre parole, devono rappresentare la seguente logica con FunctionQuery:

if y == 0, return 1 /* i.e. DIV(x,x) */ 
else, return DIV(x,y) 

qualche modo, dal documento Solr, non riesco a trovare alcuna funzione di confronto, ad esempio EQ (x, value), ecc. Da usare.

Qualcuno sarà in grado di darmi un suggerimento per costruire la logica desiderata utilizzando FunctionQuery?

Grazie!

+0

Doesnt a == 'lavoro' per te? qualcosa come 'if (y == 0,1, DIV (x, y))'? –

+0

Non funziona. Mi sto aspettando ',' nella posizione 17 in 'if (exposure_count == 0,1, div (1, exposure_count))'. Questo è quello che cerco di utilizzare la funzione Boost nella query. La sintassi completa è {! Boost b = if (exposure_count == 0,1, div (1, exposure_count))} – ckh

+0

Per aggiungere: Se rimuovo == 0, ha funzionato. {! Spinta + b% 3Dif (exposure_count, 1, div (1, exposure_count))}. Sembra che non ci sia modo di fare un confronto. – ckh

risposta

3

per ripulire questa domanda e accedere qual è la mia soluzione finale, grazie a Srikanth Venugopalan commento:

in realtà è necessario passare gli argomenti. exposure_count = 0 viene interpretato come falso. Così il vostro condizione sarebbe {! Spinta b = if (exposure_count, div (1, exposure_count), 1)}"

come sembra, Lucid funziona documentation ha un errore. Il parser FunctionQuery non tiene il confronto operatori come ==, almeno questo è quello che ho trovato guardando il codice sorgente.Inoltre, il separatore di campo per la funzione IF() dovrebbe essere, (virgola) e non; (punto e virgola)

Il funzionario Solr wiki è corretto

0

è possibile utilizzare == per eguali e se istruzione condizionale, come di seguito: -

esempio if(y == 0; 1; DIV(x,y))

Controllare l'esempio @Documentation

if(color=="red"; 100; if(color=="green"; 50; 25)):
Questa funzione controlla il campo documento "colore", e se è "rosso" restituisce 100, se è "verde" restituisce 50, ritorna altro 25.

Edit: -

Solr if wiki cita, (virgola) come separatore

e .es. if(exists(myField),100,0)

+0

I'm getting Expected ',' in posizione 17 in 'if (exposure_count == 0,1, div (1, exposure_count))'. Questo è quello che cerco di utilizzare la funzione Boost nella query. La sintassi completa è {! Boost b = if (exposure_count == 0,1, div (1, exposure_count))} – ckh

+0

il separatore è; (punto e virgola) e non, (virgola) – Jayendra

+0

Per aggiungere: Se rimuovo == 0, ha funzionato. {! Spinta + b% 3Dif (exposure_count, 1, div (1, exposure_count))}. Sembra che non ci sia modo di fare un confronto. – ckh

2

Per i termini di stringa funziona:.

se (termfreq (fieldname, "valore"), 2,1)

che produce 2 se "value" è contenuto in "nomecampo" (termfreq sarà> 0)