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>
如果您需要任何其他信息,请让我知道!