Solr提升查询语法

时间:2014-02-28 23:22:04

标签: solr

Solr function query documentation说:

对于exists(query({!v='year:2012'})) = 2012

的文档,

true将返回year

我有一个类似的文件:

{
  id: 1,
  user_type: ADMIN,
  like_score: 1
}

iduser_typelike_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

但它没有按照我想要的分数做到。

1 个答案:

答案 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