Reputation: 11023
The Solr function query documentation says:
exists(query({!v='year:2012'}))
will return true
for docs with year
=2012
I have a document like:
{
id: 1,
user_type: ADMIN,
like_score: 1
}
id
, user_type
and like_score
are all indexed and stored files, with id
being int, user_type
being string and like_score
being int.
I issue a query like this:
q={!boost b=if(true,10,1)}id:1&rows=1&fl=*,score
which works. But this query does not work:
q={!boost b=if(exists(query({!v='user_type:ADMIN'})),10,1)}id:1&rows=1&fl=*,score
It gives an error like this:
"error":{
"msg":"org.apache.solr.search.SyntaxError: Cannot parse ')),5,10)}id:1': Encountered \" \")\" \") \"\" at line 1, column 0.\nWas expecting one of:\n <NOT> ...\n \"+\" ...\n \"-\" ...\n <BAREOPER> ...\n \"(\" ...\n \"*\" ...\n <QUOTED> ...\n <TERM> ...\n <PREFIXTERM> ...\n <WILDTERM> ...\n <REGEXPTERM> ...\n \"[\" ...\n \"{\" ...\n <LPARAMS> ...\n <NUMBER> ...\n <TERM> ...\n \"*\" ...\n ",
"code":400
}
How do I fix the query?
This syntax works:
q={!func}if(exists(query({!v='user_type:ADMIN'})),5,10)&rows=1&fl=*,score
but it doesn't do what I want to the score.
Upvotes: 1
Views: 2159
Reputation: 11023
Asked solr-user group. Here is answer from Chris Hostetter:
The problem is the way you are trying to nest queries inside of each other
w/o any sort of quoting -- the parser has no indication that the "b" param
is if(exists(query({!v='user_type:ADMIN'})),10,1)
it thinks it's
"if(exists(query({!v='user_type:ADMIN'"
and the rest is confusing it.
If you quote the "b" param to the boost parser, then it should work...
http://localhost:8983/solr/select?q={!boost b="if(exists(query({!v='foo_s:ADMIN'})),10,1)"}id:1
...or if you could use variable derefrencing, either of these should work...
http://localhost:8983/solr/select?q={!boost b=$b}id:1&b=if(exists(query({!v='foo_s:ADMIN'})),10,1)
http://localhost:8983/solr/select?q={!boost b=if(exists(query($nestedq)),10,1)}id:1&nestedq=foo_s:ADMIN
-Hoss
Upvotes: 4