Solr Demax查询解析器和特殊值

Solr Demax查询解析器和特殊值,solr,Solr,在Solr文档中,我看到使用Demax可以将用户的查询值按原样输入 Demax查询解析器支持一个极其简化的 Lucene QueryParser语法。在Lucene中,引号可以用于分组 短语、和+/-可用于表示强制性和可选条款。 所有其他Lucene查询解析器特殊字符(AND和OR除外) 转义以简化用户体验 因此,只有这些值有一些特殊的含义:和,而不是,+,-,” 但当我使用NOT短语时,它的行为也类似于布尔运算符。当我使用查询时: q:"Difference Java &&",

在Solr文档中,我看到使用Demax可以将用户的查询值按原样输入

Demax查询解析器支持一个极其简化的 Lucene QueryParser语法。在Lucene中,引号可以用于分组 短语、和+/-可用于表示强制性和可选条款。 所有其他Lucene查询解析器特殊字符(AND和OR除外) 转义以简化用户体验

因此,只有这些值有一些特殊的含义:和,而不是,+,-,”

但当我使用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应该处理来自常规用户的输入,比如一个网络搜索引擎会。