C# 索引关键字包含变异元音(umlaut)时无结果

C# 索引关键字包含变异元音(umlaut)时无结果,c#,sitecore,lucene.net,C#,Sitecore,Lucene.net,我在客户环境中有一种奇怪的行为。我们用Sitecore建立了一个Lucene索引。当使用包含变异元音的关键字(umlaute,例如äöü,例如Zürich)搜索索引时,即使存在一些结果,也不会返回任何结果。在我们的环境中,这一切都很好。据我所知,这两个系统上的解决方案的配置和设置是相同的 我已经用Luke查看了这两个索引。它们似乎也一样。使用包含变异元音的关键字进行搜索,返回与Luke相同的结果。因此,索引本身应该很好,只是查询似乎有所不同 我在想操作系统上一定缺少配置/安装,或者可能是IIS本

我在客户环境中有一种奇怪的行为。我们用
Sitecore
建立了一个
Lucene
索引。当使用包含变异元音的关键字(umlaute,例如
äöü
,例如
Zürich
)搜索索引时,即使存在一些结果,也不会返回任何结果。在我们的环境中,这一切都很好。据我所知,这两个系统上的解决方案的配置和设置是相同的

我已经用
Luke
查看了这两个索引。它们似乎也一样。使用包含变异元音的关键字进行搜索,返回与
Luke
相同的结果。因此,索引本身应该很好,只是查询似乎有所不同

我在想操作系统上一定缺少配置/安装,或者可能是IIS本身,或者是什么原因造成的

有没有人有类似的经历

谢谢,
Serge

我不确定您客户的环境发生了什么变化,但是,下面的解决方案对于这个问题以及搜索带有特殊字符的单词可能会产生的其他问题可能会很有用

下面的方法将从一个文本字符串中删除任何变音符号。例如,如果您传递它
Zürich
,它将返回
Zurich
。诀窍是在索引之前通过此方法传递内容。在Sitecore 6中,这可以在数据库爬虫的自定义实现中完成。在Sitecore 7中,计算字段可能是一个很好的候选字段

public static string NormalizeDiacritics(this string input)
{
    if (String.IsNullOrEmpty(input)) return String.Empty;

    var sb = new StringBuilder();
    foreach (var c in input.Normalize(NormalizationForm.FormD))
    {
        if (char.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark)
            sb.Append(c);
    }

    return sb.ToString();
}

下一步是通过相同的方法传递访问者的搜索查询。这样,您就可以确信搜索
Zürich
Zurich
将始终返回结果。这尤其方便,因为许多访问者在网上搜索时不需要花时间输入特殊字符(至少对于说英语的访问者是这样)

我在Solr&Lucence上也遇到了类似的问题,在客户环境中,我不得不在下面的配置文件中将URIEncoding=“UTF-8”添加到“Connector”节点

C:\Program Files\Apache软件基金会\Tomcat 7.0\conf\server.xml

你的可能不是完全相同的问题,但我会研究字符编码问题