【问题标题】:stop words in sitecore站点核心中的停用词
【发布时间】:2011-02-02 07:17:03
【问题描述】:

我们正在使用 Lucene 作为 sitecore 的一部分进行文本搜索。 有什么方法可以忽略站点核心搜索中的停用词(如 a,an,the...)?

【问题讨论】:

  • 这个有什么用例?如果您搜索 the cat in the hat,您是否希望它真的像您输入 cat hat 一样进行搜索?还是您的意思是在结果中过滤掉它们?

标签: lucene sitecore


【解决方案1】:

默认情况下,Sitecore 使用 Lucene 标准分析器 - Lucene.Net.Analysis.Standard.StandardAnalyzer。您可以看到这是在 web.config 文件的 /configuration/sitecore/search/analyzer 元素中定义的。 StandardAnalyzer 类的构造函数之一接受它将考虑停用词的字符串数组。默认情况下,它使用硬编码的停用词列表,其中包括:

“a”、“an”、“and”、“are”、“as”、“at”、 “是”、“但是”、“由”、“为”、“如果”、“在”、 “进入”、“是”、“它”、“不”、“不是”、“属于”、 “在”、“或”、“这样”、“那个”、“该”、 “他们的”、“那么”、“那里”、“这些”、 “他们”、“这个”、“到”、“曾经”、“将”、 “与”

如果您想覆盖此行为,我认为您应该继承 StandardAnalyzer 并覆盖其默认构造函数,以从另一个来源而不是硬编码数组中获取停用词。您有多种选择,甚至可以从文本文件中读取。不要忘记在 web.config 中用你的标准类替换标准类。

请参阅StandardAnalyzer 类的其他构造函数以获取更多详细信息。 .NET Reflector 是你这里的朋友。

【讨论】:

  • 什么意思?我在上面的答案中引用的代码放在 Lucene.Net.dll 中(在 Sitecore /bin 文件夹中)。您可以使用 .NET Reflector 浏览此第三方库。我建议在您的情况下做的是创建一个新类,从 StandardAnalyzer 继承它,并让默认构造函数以另一种方式(您选择的方式)搜索停用词。在 StandardAnalyzer 类的其他构造函数的代码中有这样的例子。
  • 顺便说一句,Alex Shyba 刚刚发布了一篇关于使用 Sitecore 和 Lucene 进行搜索的精彩摘要博客文章:sitecoreblog.alexshyba.com/2011/02/…。这篇文章还充满了有关该主题的各种资源的有用链接。在这方面继续前进之前一定要检查一下!
【解决方案2】:

Yans 帖子的示例:

public class CaseAnalyzer : Lucene.Net.Analysis.Standard.StandardAnalyzer
{
   private static Hashtable stopWords = new Hashtable(); //{{"by","by"}}; <-- Makes "by" a stopword that will not be matched in analyzer
   public CaseAnalyzer() : base(Lucene.Net.Util.Version.LUCENE_29, stopWords)
   {      
   }
}

这应该在

下的 web.config 中注册
/configuration/sitecore/search/analyzer

分析器注册示例

<caseanalyzer type="EBF.Business.Search.Analyzers.CaseAnalyzer, EBF.Business, Version=1.0.0.0, Culture=neutral"/>

最后你只需要像这样在搜索配置中注册你的分析器

<Analyzer ref="search/caseanalyzer" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    • 2018-02-24
    相关资源
    最近更新 更多