Solr function query documentation说:
对于exists(query({!v='year:2012'}))
= 2012 的文档, true
将返回year
我有一个类似的文件:
{
id: 1,
user_type: ADMIN,
like_score: 1
}
id
,user_type
和like_score
都是索引和存储的文件,id
为int,user_type
为字符串,like_score
为中间体
我发出这样的查询:
q={!boost b=if(true,10,1)}id:1&rows=1&fl=*,score
哪个有效。但是这个查询不起作用:
q={!boost b=if(exists(query({!v='user_type:ADMIN'})),10,1)}id:1&rows=1&fl=*,score
它给出了这样的错误:
"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
}
如何修复查询?
此语法有效:
q={!func}if(exists(query({!v='user_type:ADMIN'})),5,10)&rows=1&fl=*,score
但它没有按照我想要的分数做到。
答案 0 :(得分:4)
询问solr-user组。以下是Chris Hostetter的回答:
问题在于您尝试将查询嵌套在彼此内部的方式
没有任何类型的引用 - 解析器没有指示“b”参数
是if(exists(query({!v='user_type:ADMIN'})),10,1)
它认为是
"if(exists(query({!v='user_type:ADMIN'"
其余的都让人感到困惑。
如果你将“b”参数引用到boost解析器,那么它应该可以工作......
http://localhost:8983/solr/select?q={!boost b="if(exists(query({!v='foo_s:ADMIN'})),10,1)"}id:1
...或者如果你可以使用变量derefrencing,其中任何一个都应该 工作...
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