处理拼写检查建议

时间:2013-08-05 10:18:48

标签: solr solrnet solr4

我们正在尝试使用Solr的拼写检查来做“你的意思吗?”类型建议。

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

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

然而,似乎拼写检查使用“ks”而不是“10ks”作为术语,因此当我们用“5ks”替换“ks”时,我们得到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”会获得“运行事件”。

我唯一能想到的就是做一些天真的事情,例如检查原始查询中的空格,然后在查询包含空格时替换整个事物。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

WordDelimiterFilterFactory,将字母数字转换上的拆分设置为关闭(请参阅:http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.WordDelimiterFilterFactory),以及StandardTokenizerFactory。