在Solr中搜索特殊字符的问题

时间:2016-07-01 06:06:31

标签: solr

我使用的是Solr 6.1.0

当我使用defType = edismax,并通过设置debug = True使用调试模式时,我发现搜索" r& d"实际上只是搜索角色" r"。

http://localhost:8983/solr/collection1/highlight?q="的R& d"&安培; debugQuery =真安培; DEFTYPE = edismax

"debug":{
  "rawquerystring":"\"r",
  "querystring":"\"r",
  "parsedquery":"(+DisjunctionMaxQuery((text:r)))/no_coord",
  "parsedquery_toString":"+(text:r)"

即使我使用转义字符进行搜索,也没有任何帮助。

http://localhost:8983/solr/collection1/highlight?q=" R \&安培; d"&安培; debugQuery =真安培; DEFTYPE = edismax

"debug":{
  "rawquerystring":"\"r\\",
  "querystring":"\"r\\",
  "parsedquery":"(+DisjunctionMaxQuery((text:r)))/no_coord",
  "parsedquery_toString":"+(text:r)",

但如果我使用" r * d"等其他符号,那么搜索就可以了。

http://localhost:8983/solr/collection1/highlight?q=" R * d"&安培; debugQuery =真安培; DEFTYPE = edismax

"debug":{
   "rawquerystring":"\"r*d\"",
   "querystring":"\"r*d\"",
   "parsedquery":"(+DisjunctionMaxQuery((text:\"r d\")))/no_coord",
   "parsedquery_toString":"+(text:\"r d\")",

这背后的原因是什么?

的问候,
埃德

2 个答案:

答案 0 :(得分:0)

首先 - 如果您已经粘贴了URL,class是URL中不同参数之间的分隔符,如果它属于参数,则必须正确地进行urlencoded,并且不是参数分隔符。

&

被解析为

q=text:"foo&bar"&fl=..

您的Solr库通常会透明地为您处理此问题。 q=text:"foo bar" fl=.. text%3A%22r%26d%22的urlencoded版本。

其次,任何进一步的解析将取决于您正在搜索的字段的分析链和标记器。这将确定在查询文本和索引文本之间匹配标记之前保留哪些字符以及如何标记文本(拆分为单独的标记)。

答案 1 :(得分:0)

您使用的是哪种分析仪适用于您的领域。最好尝试一种不像KeyWordTokenizerFactory那样对你的字段进行标记的分析器。