Solr Demax查询解析器和特殊值
在Solr文档中,我看到使用Demax可以将用户的查询值按原样输入 Demax查询解析器支持一个极其简化的 Lucene QueryParser语法。在Lucene中,引号可以用于分组 短语、和+/-可用于表示强制性和可选条款。 所有其他Lucene查询解析器特殊字符(AND和OR除外) 转义以简化用户体验 因此,只有这些值有一些特殊的含义:和,而不是,+,-,”Solr Demax查询解析器和特殊值,solr,Solr,在Solr文档中,我看到使用Demax可以将用户的查询值按原样输入 Demax查询解析器支持一个极其简化的 Lucene QueryParser语法。在Lucene中,引号可以用于分组 短语、和+/-可用于表示强制性和可选条款。 所有其他Lucene查询解析器特殊字符(AND和OR除外) 转义以简化用户体验 因此,只有这些值有一些特殊的含义:和,而不是,+,-,” 但当我使用NOT短语时,它的行为也类似于布尔运算符。当我使用查询时: q:"Difference Java &&",
但当我使用NOT短语时,它的行为也类似于布尔运算符。当我使用查询时:
q:"Difference Java &&",
我得到:
"metadata":[
"error-class","org.apache.solr.common.SolrException",
"root-error-class","org.apache.solr.parser.ParseException"],
"msg":"org.apache.solr.search.SyntaxError: Cannot parse 'Difference Java &&': Encountered \"<EOF>\" at line 1, column 18.\r\nWas expecting one of:\r\n <NOT> ...\r\n \"+\" ...\r\n \"-\" ...\r\n <BAREOPER> ...\r\n \"(\" ...\r\n \"*\" ...\r\n <QUOTED> ...\r\n <TERM> ...\r\n <PREFIXTERM> ...\r\n <WILDTERM> ...\r\n <REGEXPTERM> ...\r\n \"[\" ...\r\n \"{\" ...\r\n <LPARAMS> ...\r\n \"filter(\" ...\r\n <NUMBER> ...\r\n <TERM> ...\r\n \"*\" ...\r\n ",
"code":400}}
“元数据”:[
“错误类”,“org.apache.solr.common.SolrException”,
“根错误类”,“org.apache.solr.parser.ParseException”],
“msg”:“org.apache.solr.search.SyntaxError:无法分析“Difference Java&&”:在第1行第18列遇到\“\”。\r\n应为:\r\n…\r\n \“+\”…\r\n \“-\”…\r\n…\r\n \“*\”…\r\n…\r\n…\r\n…\r\n…\r\n…\r\n…\r\n…\r\n…[…\r\n…\r\n”…\r\n\“筛选器(\”..\r\n…\r\n…\r\n\“*\”..\r\n”,
“代码”:400}
我是否误解了某些东西或它的文档错误?是否有一些简单的方法可以忽略所有lucene特殊字符,而只是将用户的查询短语放入Demax查询?标准标记器无论如何都应该忽略这些值(对我来说没问题)如前所述,引号可用于对短语进行分组,您只需转义引号即可
在内部,它使用双引号,当你传递相同的内容时,它就破坏了它。因此,转义它,那么它应该可以正常工作
q:“差异Java&&”
此外,我假设您正在使用&&for布尔运算符,因此不需要在引号内传递它
我正在本地计算机上执行此查询(“java”&&“python”)
对&->%26编码后,解析器将正确解析它
q=“java”%20**%26%26**%20“python”&wt=json&debug=true&qf=creator\u txt&defType=demax
“parsedquery_-toString”:“+(+(creator_-txt:java)+(creator_-txt:python))
()“
你能发布你正在做的整个solr查询吗?我怀疑你实际上没有使用引号。语法错误应该包括这样的引号:
无法解析“\”差异Java&&\”
。但是,如果使用引号,就不会有错误。当我的任何Demax查询(没有引号)时以&
或和或|
或或或结束或开始,与上面抛出的语法错误相同。示例查询:q=hello+和&df=content&defType=dismax
。我想知道这是预期行为还是应该被视为错误,因为dismax应该处理来自常规用户的输入,比如一个网络搜索引擎会。