我正在尝试使用Lucene的Dictionary和拼写检查类来制作Lucene自动完成,但到目前为止只能成功地使其适用于单个术语。
我用谷歌搜索并发现我们需要使用Shingle Matrix过滤器来完成工作。有经验的Lucene有人能告诉我一种方法吗?
我需要的是它必须生成带有短语的自动完成单词。例如,如果我有一个这样的文档:“这是一个长篇大论,其中包含太多的单词”,那么我应该能够生成“长行”,“长咆哮”,“许多”之类的单词单词“等......
可能吗?
感谢。
答案 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标识多字单元的最大长度