在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查询?无论如何,标准的标记器应该进入这些值(对我来说没问题)
答案 0 :(得分:0)
如上所述,引号可用于对短语进行分组,您需要做的就是转义引号。
在内部,它使用的是双引号,当你传递它时它会破坏它。所以逃避它然后它应该工作正常。
q:“差异Java&amp;&amp;”
此外,我想你正在使用&amp;&amp;对于布尔运算符,所以你不需要在引号
中传递它我正在本地进行此查询(“java”&amp;&amp;“python”)
解析器在对&amp; - &gt;进行编码后正确解析它%26
q =“java”%20 **%26%26 **%20“python”&amp; wt = json&amp; debug = true&amp; qf = creator_txt&amp; defType = dismax
“parsedquery_toString”:“+(+(creator_txt:java)+(creator_txt:python)) ()”,