【问题标题】:Dealing with spell check suggestions处理拼写检查建议
【发布时间】:2013-08-05 10:18:48
【问题描述】:

我们正在尝试使用 Solr 的拼写检查来执行“您的意思是?”输入建议。

我们遇到的问题是我们正在用 Solr 的建议替换查询中的原始术语。

例如:搜索“10ks”(我们正在创建一个活动网站)将返回“5ks”的建议。

但是,拼写检查似乎使用“ks”而不是“10ks”作为术语,因此当我们将“ks”替换为“5ks”时,我们得到 105ks。这会导致一个无限的“你的意思是”循环,因为 Solr 在拼写检查建议中总是使用“ks”而不是“10ks”。

这是我们用来替换原始查询中的建议的代码。

    /// <summary>
    /// Method that takes the first suggestion for all the spelling and applys them to the keyword
    /// </summary>
    private string GetSuggestedQuery(string keyword, List<SpellCheck> suggestions)
    {
        if (suggestions != null)
        {
            for (var i = 0; i < suggestions.Count; i++)
            {
                keyword = keyword.Replace(suggestions.ElementAt(i).Query,
                                          suggestions.ElementAt(i).Suggestions.First());
            }
            return keyword;
        }
        return null;
    }

这对于两个词的查询非常有用,例如“runnig events”会得到“running events”。

我唯一能想到的就是做一些天真的事情,比如检查原始查询中的空格,然后如果查询包含空格则替换整个内容。

【问题讨论】:

    标签: solr solrnet solr4


    【解决方案1】:

    查看 spellcheck.collat​​e 设置。它将按照您建议的方式返回一个重写的查询。

    https://wiki.apache.org/solr/SpellCheckComponent#spellcheck.collate

    【讨论】:

    • 整理后的查询似乎有同样的问题,所以对于“london 10ks”它被重写为“london 105ks”我认为这是一个标记化问题..
    • 我同意这与标记化有关。您能否使用您从中获得建议的字段的 fieldType 定义更新您的问题。
    【解决方案2】:

    如果不查看 schema.xml 中的字段定义,很难回答。可能适用于您的案例的分析器是:

    WordDelimiterFilterFactory 与 StandardTokenizerFactory 一起设置为关闭字母数字转换(请参阅:http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.WordDelimiterFilterFactory)。

    【讨论】:

      猜你喜欢
      • 2011-05-11
      • 2019-04-16
      • 2014-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-27
      • 2014-07-15
      相关资源
      最近更新 更多