2014-11-21 39 views
0

在我的公司,我們有一個測試字符串,我們用它來確保逃避問題在我們的許多組件正確處理:Solr的增加不必要的MatchAllDocsQuery,我不知道爲什麼

!"§$%&/()?ß><öä€ü\ÖÄÄÜ#' 

當我添加一個文件以Solr爲標題,一切都很好。 我現在嘗試用相同的字符串來查詢該文檔,但與所有的特殊查詢參數轉義(see here for details):

!\"§$%&\/\(\)\?ß><öä€ü\\ÖÄÄÜ#' 

出人意料的是,在我的索引匹配該查詢的所有文件!

我可以在調試輸出中看到(見下文),Solr在我的實際查詢後添加了一個MatchAllDocsQuery。這就是爲什麼所有文件都符合,但最大的問題是:

爲什麼Solr添加了匹配所有查詢?這對我沒有任何意義。有趣的是,當我刪除其中一個轉義反斜槓(例如雙引號之前的第一個反斜槓)時,查詢就像一個魅力,只能找到我的一個預期文檔。無論出於何種原因,Solr都不會再添加該match_all查詢。

!"§$%&\/\(\)\?ß><öä€ü\\ÖÄÄÜ#' 

任何想法?

調試信息:

"rawquerystring": "!\\\"§$%&\\/\\(\\)\\?ß><öä€ü\\\\ÖÄÄÜ#'", 
"querystring": "!\\\"§$%&\\/\\(\\)\\?ß><öä€ü\\\\ÖÄÄÜ#'", 
"parsedquery": "(+(-DisjunctionMaxQuery((((de_all:ss de_all:oa de_all:u >de_all:oaau)~4) | ((en_all:ß en_all:öä en_all:ü en_all:öääü)~4) | string_all:\"§$%&/()?ss><oa€u\\oaau#')) +MatchAllDocsQuery(*:*)))/no_coord", 
"parsedquery_toString": "+(-(((de_all:ss de_all:oa de_all:u de_all:oaau)~4) | ((en_all:ß en_all:öä en_all:ü en_all:öääü)~4) | string_all:\"§$%&/()?ss><oa€u\\oaau#') +*:*)" 

請求處理程序:

<requestHandler name="/custom" class="solr.SearchHandler"> 
    <lst name="defaults"> 
     <str name="echoParams">none</str> 
     <str name="wt">json</str> 
     <str name="defType">edismax</str> 
     <str name="qf">de_all^1 en_all^1 string_all^1</str> 
     <str name="fl">id,score</str> 
     <str name="indent">false</str> 
    </lst> 
</requestHandler> 

如果您需要任何其他信息,請讓我知道!

回答

0

啊,愚蠢的錯誤:我忘了逃避領先的'!',這使得這是一個單一的否定短語查詢。 AFAIK這些內部處理與匹配所有查詢。

相關問題