我正在使用Lucene Query Parser 5.1.0
这些过滤器查询不起作用:
* AND {!tag=guid}guid:(*)
* && {!tag=guid}guid:(*)
* {!tag=guid}guid:(*)
它抛出
org.apache.solr.search.SyntaxError: Cannot parse 'guid:(*': Encountered \"<EOF>\" at line 1, column 7.\nWas expecting one of:\n <AND> ...\n <OR> ...\n <NOT> ...\n \"+\" ...\n \"-\" ...\n <BAREOPER> ...\n \"(\" ...\n \")\" ...\n \"*\" ...\n \"^\" ...\n <QUOTED> ...\n <TERM> ...\n <FUZZY_SLOP> ...\n <PREFIXTERM> ...\n <WILDTERM> ...\n <REGEXPTERM> ...\n \"[\" ...\n \"{\" ...\n <LPARAMS> ...\n <NUMBER> ...\n
这些过滤查询确实有效:
* AND {!tag=guid}guid:*
* AND guid:(*)
* AND guid:*
* && {!tag=guid}guid:*
* && guid:(*)
* && guid:*
* {!tag=guid}guid:*
* guid:(*)
* guid:*
{!tag=guid}guid:(*)
{!tag=guid}guid:*
guid:(*)
guid:*
为什么前三个不起作用?它是查询解析器中的错误吗?
编辑: 我发现空间也有奇怪的行为:
这确实有效:
* AND {!tag=guid}guid:"a"
这不起作用:
* AND {!tag=guid}guid:"a "
答案 0 :(得分:0)
FilterQueries中的标签只是一种特殊的LocalParameter,用作SOLR中的分面参考点。
请注意,LocalParameters是 SOLR特定的,并且不会以任何有意义的方式使用LuceneQueryParser进行解析。
如果您对常规LocalParameter语法感兴趣,可以查看:
https://cwiki.apache.org/confluence/display/solr/Local+Parameters+in+Queries
根据该文件
本地参数是Solr请求中特定的参数 查询参数。
和
本地参数的基本语法:
要指定本地参数,请在参数之前插入以下 待修改:
- 以{!
开头- 插入由空格分隔的任意数量的键=值对
- 以}结尾并立即跟随查询参数
您可以为每个参数指定一个本地参数前缀。
因此,您不应该像使用查询的任何部分一样为本地参数添加前缀。如果您确实需要使用多个LocalParameters,请考虑使用CNF
将大型FilterQuery拆分为多个较小的FilterQuery