2

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

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

我在想操作系统或IIS本身可能缺少配置/安装,或者还有什么可能导致这种情况?

有没有人有类似的经历?

谢谢, 塞尔吉

4

2 回答 2

1

我在 Solr & Lucence 上遇到了类似的问题,结果在客户环境中我必须将 URIEncoding="UTF-8" 添加到以下配置文件中的“连接器”节点。

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

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

于 2013-11-08T07:26:56.350 回答
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将始终返回结果。这特别方便,因为许多访问者在在线搜索时不会花时间输入特殊字符(至少对于说英语的访问者来说是这样)。

于 2013-11-07T14:44:52.483 回答