【问题标题】:Sitecore lucene greek search is accent sensitive?Sitecore lucene 希腊语搜索对重音敏感吗?
【发布时间】:2017-01-02 04:50:51
【问题描述】:

在默认安装 Sitecore 8 时,我有一个存储桶,里面有很多东西。当我在希腊语的 RTE 字段上发出内容搜索查询时,Sitecore 似乎以区分重音的方式处理搜索词,这对于希腊语是错误的。

有人可以指出正确的方向,使索引重音对希腊语不敏感吗?

【问题讨论】:

    标签: sitecore lucene.net sitecore8 accent-insensitive


    【解决方案1】:

    问题似乎在于 Sitecore 理解文化并将文化执行上下文分配给其搜索和索引的方式。

    对于特定的解决方案,我们已将“el-GR”语言重命名为“el”(以在 url 中显示“nicely”)。反过来,Sitecore 分配了一个名为“el”而不是“el-GR”的 CultureInfo。但是在 defaultIndexConfiguration 配置文件中,只有 CultureExecutionContext 的 CultureInfo 为 el-GR 时才会分配希腊分析器,因此数据实际上是使用 StandardAnalyzer 索引的,而不是 GreekAnalyzer,因此对重音敏感。

    我们添加了额外的配置来涵盖 CultureInfo 名称为“el”的情况(实际上复制了“el-GR”配置节点)并且在必要的索引重建之后,一切正常。

    虽然 Sitecore 会去更改 CultureInfo 对象的名称,但它相当模糊......

    【讨论】:

      【解决方案2】:

      您需要更换分析仪。就如何分析而言,对于这种情况,我想到了两个不错的选择:

      • 使用org.apache.lucene.analysis.el.GreekAnalyzer。这将满足您的要求,并添加希腊语词干。这可能是最好的选择,除非你真的不想要词干。

      • 创建一个使用GreekLowerCaseFilter 的自定义分析器,而不是标准的小写过滤器。此过滤器将删除变音符号等,因此我相信它会满足您的需求:

        public class StandardWithGreekLower extends StopwordAnalyzerBase{
            public StandardWithGreekLower() {
            }
        
            @Override
            protected TokenStreamComponents createComponents(final String fieldName) {
                StandardTokenizer src = new StandardTokenizer();
                TokenStream filter = new StandardFilter(src);
                filter = new GreekLowerCaseFilter(filter);
                //If you want to add a stop filter, this would be a good place for it
                return new TokenStreamComponents(src, filter);
            }
        }
        

      【讨论】:

      • 啊,我应该更清楚地表明这是一个 lucene.NET 问题。另外,我可以验证我确实在使用希腊语分析器,因为这就是“默认 Sitecore 8 安装”所做的 - 当文化被识别为希腊语时分配希腊语分析器。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-21
      • 2015-09-28
      • 2017-08-21
      • 2011-11-22
      • 1970-01-01
      • 2021-03-09
      相关资源
      最近更新 更多