【发布时间】:2017-01-28 20:41:23
【问题描述】:
在 Solr 文档中,我看到使用 dismax 我可以按原样输入来自用户的查询值。 https://cwiki.apache.org/confluence/display/solr/The+DisMax+Query+Parser
DisMax 查询解析器支持一个极其简化的子集 Lucene QueryParser 语法。与在 Lucene 中一样,引号可用于分组 短语和 +/- 可用于表示强制和可选子句。 所有其他 Lucene 查询解析器特殊字符(AND 和 OR 除外) 转义以简化用户体验
所以只有那些值有一些特殊的含义:AND,NOT,+,-,"
但是当我使用 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}}
我是否误解了某些内容或其文档错误?是否有一些简单的方法可以忽略所有 lucene 特殊字符并将用户的查询短语放入 dismax 查询?无论如何,标准标记器都应该忽略这些值(对我来说没问题)
【问题讨论】:
-
你能发布你正在做的整个 solr 查询吗
-
我怀疑你实际上没有使用引号。 SyntaxError 会 包含这样的引号:
Cannot parse '\"Difference Java &&\"'。但是,使用引号就不会出现错误。当我的任何 DisMax 查询(不带引号)以&&或AND或||或OR结尾或开头时,会抛出与上述相同的语法错误。示例查询:q=hello+AND&df=content&defType=dismax。我想知道这是预期的行为还是应该被视为错误,因为 DisMax 应该像网络搜索引擎一样处理来自普通用户的输入。
标签: solr