2017-01-28 38 views
0

在Solr文档中,我发现使用dismax我可以把用户的查询值保持原样。 https://cwiki.apache.org/confluence/display/solr/The+DisMax+Query+ParserDismax查询分析器和特殊值

的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查询中?标准分词器应该反正ingore那些值(它对我来说)

+0

你可以发布你正在做 –

+0

我怀疑你居然没有使用引号整个Solr的查询。 SyntaxError _would have_包含引号,如下所示:'无法解析'\“差异Java && \”''。但是,用引号就不会有错误。 当我的任何DisMax查询(不含引号)结束或以'&&'或'AND'或'||'或'OR'开头时,将抛出与上面相同的语法错误。示例查询:'q = hello + AND&df = content&defType = dismax'。 我想知道这是预期的行为还是应该被视为一个错误,因为DisMax应该处理像网络搜索引擎这样的常规用户的输入。 – Felizett

回答

0

如前所述,报价可以用于分组短语,所有你需要做的就是逃避报价。

在内部,它使用双引号,当你传递相同的内容时,它将打破它。所以逃避它然后它应该工作正常。

问:“差的Java & &”

此外,我想你正在使用的& &的布尔运算符,所以你不需要它传递引号内

我在我的本地执行此查询(“java”& &“python”)

解析器解析它正确编码后& - >%26。

Q = “Java” 的%20 **%26%26%** 20 “蟒” &重量= JSON &调试=真& QF = creator_txt & DEFTYPE = dismax

“parsedquery_toString”: “+(+(creator_txt:JAVA)+(creator_txt:蟒蛇)) ()”,