当通过SolrNet进行查询,其中包含ø,æ等Scand,斯堪的纳维亚字符时,查询不会返回任何结果,而包含常规字词的查询工作正常。
使用FilterQueries
类将查询添加到SolrQueryByField
集合,其值为“ss_content”,即字段名称,值为“søren”,引号设置为false。即使我在没有“”的情况下进行测试,它也没有给出任何结果。
在浏览器中通过Solr Admin页面运行相同的查询时,它可以正常工作。
我是否错过了SolrNet中可能导致问题的一些配置?
Tomcat 8上的Solr版本是3.6,并且是从.Net 4.5应用程序调用的
非常感谢任何帮助。
答案 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?它将允许您规范化您的特殊字符。