Dismax查询解析器和特殊值

时间:2017-01-28 20:41:24

标签: solr

在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查询?无论如何,标准的标记器应该进入这些值(对我来说没问题)

1 个答案:

答案 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))   ()”,