2015-06-10 78 views
4

當通過包含斯堪的納維亞字符(如ø,æ,å)的SolrNet進行查詢時,查詢將返回任何結果,而包含普通單詞的查詢則可以正常工作。SolrNet查詢不適用於斯堪的納維亞字符

查詢已被添加到FilterQueries集合使用SolrQueryByField類與值「ss_content」是字段名稱和值\「søren\」與quoted設置爲false。即使我在søren沒有「」,但沒有給出任何結果。

當通過瀏覽器中的Solr管理頁面運行相同的查詢時,它工作正常。

我在SolrNet中缺少一些可能導致問題的配置?

Solr的版本是3.6 Tomcat上8,並正在從.NET 4.5的應用程序

任何幫助將是非常讚賞調用。

+0

您可以發佈構建solr查詢並執行搜索請求的代碼片段嗎? –

回答

0

如果它從管理面板工作正常,我會懷疑某種編碼問題。使用UTF-8,應該有一個可以設置的Tomcat 8連接器,名稱爲URIEncoding。您也可以嘗試使用分析器來查看您的非拉丁字符搜索詞是如何被Solr解釋的。

再一次,它是從管理面板工作的,所以我不確定這會對你有幫助,但是可以在你要查詢的任何字段中添加ASCIIFoldingFilterFactory。您的特殊字符不在127「基本拉丁文」ASCII塊之外,Solr似乎以不同的方式處理它們。以下是過濾器的文檔:ASCIIFoldingFilterFactory。用法看起來是這樣的:

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

作爲一個不得已而爲之的,「核」的選項,如果有可能,你有沒有使用MappingCharFilterFactory考慮?它可以讓你規範你的特殊字符。

1

Solr管理頁面查詢是一個普通的html <form method=get action="#">[...]</form>,這意味着瀏覽器將自動對所有輸入值進行URL編碼 - 這就是爲什麼它從Admin頁面工作的原因。

您需要在形成請求時對參數值進行url編碼。在.NET 4.5中,您可以使用WebUtility.UrlEncode(String)

請嘗試用WebUtility.UrlEncode("søren")替換"søren"字符串,看看它是否有效。

+0

SolrNet已根據需要編碼查詢值。 –

相關問題