2014-11-21 96 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这些内部处理与匹配所有查询。

相关问题