关键字包含mutow元音(变音符号)时索引无结果

时间:2013-11-07 09:22:58

标签: c# sitecore lucene.net

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

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

我认为操作系统上可能缺少配置/安装,或者IIS本身可能缺少配置/安装,或者还有什么可能导致此问题?

有没有人有类似的经历?

谢谢, 哔叽

2 个答案:

答案 0 :(得分:1)

我和Solr&有类似的问题。 Lucence,在客户环境中,我必须将URIEncoding =“UTF-8”添加到以下配置文件中的“Connector”节点。

C:\ Program Files \ Apache Software Foundation \ Tomcat 7.0 \ conf \ server.xml

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

答案 1 :(得分:0)

我不确定您的客户环境会发生什么,但是,下面的解决方案可能会对此问题以及其他可能源于搜索具有特殊字符的字词的问题派上用场。

以下方法将从一串文本中删除任何变音符号。例如,如果您传递Zürich,则会返回Zurich。诀窍是在索引之前通过此方法传递内容。在Sitecore 6中,这可以在DatabaseCrawler的自定义实现中完成。在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ürichZurich将始终返回结果。这特别方便,因为许多访问者在网上搜索时没有花时间输入特殊字符(至少对于会说英语的访问者来说这是真的)。