Lucene使用Shingle过滤器自动完成多个单词

时间:2011-03-10 06:30:58

标签: lucene spell-checking


我正在尝试使用Lucene的Dictionary和拼写检查类来制作Lucene自动完成,但到目前为止只能成功地使其适用于单个术语。

我用谷歌搜索并发现我们需要使用Shingle Matrix过滤器来完成工作。有经验的Lucene有人能告诉我一种方法吗?

我需要的是它必须生成带有短语的自动完成单词。例如,如果我有一个这样的文档:“这是一个长篇大论,其中包含太多的单词”,那么我应该能够生成“长行”,“长咆哮”,“许多”之类的单词单词“等......

可能吗?

感谢。

2 个答案:

答案 0 :(得分:0)

writer = new IndexWriter(dir,
new ShingleAnalyzerWrapper(new StandardAnalyzer(
Version.LUCENE_CURRENT,
Collections.emptySet()),3),
false,
IndexWriter.MaxFieldLength.UNLIMITED);

这对我有用......

答案 1 :(得分:0)

您可以在继承Lucene.Net.Analysis.Analyzer类时编写自己的Analyzer实现TokenStream函数。你可以使用这个shingleFilter从令牌流Code Code获取多字:

public override Lucene.Net.Analysis.TokenStream TokenStream(String fieldName, System.IO.TextReader       
reader)
   { 
      Lucene.Net.Analysis.TokenStream tokenStream = new     
      Lucene.Net.Analysis.Standard.StandardTokenizer(Lucene.Net.Util.Version.LUCENE_30, reader);  
      tokenStream = new Lucene.Net.Analysis.Shingle.ShingleFilter(tokenStream, maxShingleSize);
      return tokenStream;
   }

max Shingle size标识多字单元的最大长度