看起来SOLR正在考虑什么应该是有效的Unicode字符无效,并删除它们。
通过启用查询调试来查看解析器对我的查询执行的操作,我“证明了这一点”。这是一个例子:
查询='ァ☀'(\ u30a1 \ u2600)
这是SOLR用它做的事情:
'调试':{ 'rawquerystring':U '\ u30a1 \ u2600', '查询字符串':U '\ u30a1 \ u2600', 'parsedquery':U '(+ DisjunctionMaxQuery((文本:\ u30a1)))/ no_coord', 'parsedquery_toString':U '+(文本:\ u30a1)',
正如你所看到的那样,'ァ'没问题,但它是“黑太阳”角色。
我没有尝试过所有Block,但我已经确认它也不喜欢⛿(\ u26ff)和♖(\ u2656)。
我正在使用带有Jetty的SOLR,因此不应该应用各种TomCat问题WRT字符编码。
答案 0 :(得分:1)
这很可能与分析仪有关。我没有看到任何指定对这些字符的处理的确切内容,但它们可能被StandardAnalyzer
(或者你可能正在使用的任何分析器)作为标点符号处理,因此不会出现在最后的查询。 StandardAnalyzer
实现了UAX-29, Unicode Text Segmentation中前进的规则,以便将输入分成令牌。