SolrNet查询不适用于斯堪的纳维亚字符

时间:2015-06-10 13:12:17

标签: .net solr solrnet tomcat8

当通过SolrNet进行查询,其中包含ø,æ等Scand,斯堪的纳维亚字符时,查询不会返回任何结果,而包含常规字词的查询工作正常。

使用FilterQueries类将查询添加到SolrQueryByField集合,其值为“ss_content”,即字段名称,值为“søren”,引号设置为false。即使我在没有“”的情况下进行测试,它也没有给出任何结果。

在浏览器中通过Solr Admin页面运行相同的查询时,它可以正常工作。

我是否错过了SolrNet中可能导致问题的一些配置?

Tomcat 8上的Solr版本是3.6,并且是从.Net 4.5应用程序调用的

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

Solr管理页面查询是一个普通的html <form method=get action="#">[...]</form>,这意味着浏览器会自动对所有输入值进行URL编码 - 这就是它从管理页面开始工作的原因。

您需要在形成请求时对参数值进行url-encode。在.NET 4.5中,您可以使用WebUtility.UrlEncode(String)

请尝试将"søren"字符串替换为WebUtility.UrlEncode("søren"),看看它是否有效。

答案 1 :(得分:0)

如果它从管理面板中正常工作,我会怀疑某种编码问题。使用UTF-8,应该有一个Tomcat 8连接器,你可以设置它叫做URIEncoding。您也可以尝试使用分析器来查看Solr如何解释您的非拉丁字符搜索词。

同样,它在管理员面板上工作,所以我不确定这会对您有所帮助,但请尝试在您要查询的任何字段中添加ASCIIFoldingFilterFactory。你的特殊字符不在127&#34; Basic Latin&#34; ASCII块,Solr似乎以不同的方式处理它们。这是过滤器的文档:ASCIIFoldingFilterFactory。用法看起来像这样:

<fieldType . . . >
        <filter class="solr.ASCIIFoldingFilterFactory" />
</fieldType>

作为最后一个沟,&#34;核&#34;选项,如果可能,您是否考虑使用MappingCharFilterFactory?它将允许您规范化您的特殊字符。