Solr添加了不需要的MatchAllDocsQuery,我不知道为什么

时间:2014-11-21 16:37:09

标签: solr

在我的公司,我们有一个测试字符串,我们用它来确保在我们的许多组件中正确处理转义问题:

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

当我向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>

如果您需要任何其他信息,请告诉我们!

1 个答案:

答案 0 :(得分:0)

啊,愚蠢的错误:我忘了逃避领先的'!',这使得这个查询带有一个否定的短语。 AFAIK那些在内部处理,匹配所有查询。