2017-01-28 36 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:蟒蛇)) ()」,