首先,我必须说我们使用的Lucene.NET版本并不是最新的,因为它与Sitecore 6.4.1打包在一起,直到现在我们还没有必要深入研究分析器和干(大错!)。
基本上,我们正在尝试在索引时或查询时实现某种形式的词干(寻找最佳建议?)。我们遇到的主要问题是所有关于Stemming的文档都是用Java编写的,我真的很想把它带到C#。我希望有人可以提供源代码示例或链接到该领域的资源。
由于我们的Lucene.NET版本已经很老了,我认为使用Snowball Analyzer是不可能的(甚至不能在我们的版本中使用),因此我们考虑使用PorterStemFilter。 / p>
任何人都可以提供任何有关如何在不升级Lucene的情况下使Stemming工作的帮助/建议吗?
亲切的问候
史蒂夫
答案 0 :(得分:1)
通常你编写自己的Analyzer来构建TokenStream链。您需要在索引和搜索时间停留。
您可以像使用其他任何分析仪一样使用分析仪。
示例分析器:
public class MyAnalyzer : Analyzer
{
public override TokenStream TokenStream(string fieldName, TextReader reader)
{
return new PorterStemFilter(new StandardTokenizer(reader));
}
}
答案 1 :(得分:1)
Snowball是最好的afaik。有C,Java等实现。 只需在项目中构建自己的Analyzer / Tokenfilter。
答案 2 :(得分:0)
使用旧版本的Lucene,您可能需要考虑复制PorterStemmerAlgorithm类的C#实现
E.g。从这里: http://tartarus.org/~martin/PorterStemmer/csharp2.txt
您可以使用它来在索引时阻止您的关键字段值,以将所有字词的词干版本存储在索引中的“词干字段”中。
在查询时,您可以使用同一个类来阻止搜索词,并使用词干查询搜索“词干字段”。
这样,您可以绕过Lucene更高版本中实现的所有特定分析器内容,您仍然可以搜索所有单词的完整版本...
它比理想的手动更多 - 但它会完成工作: - )
祝你好运!