【问题标题】:Lucene Autocomplete with multiple words using Shingle filterLucene 使用 Shingle 过滤器自动完成多个单词
【发布时间】:2011-07-12 11:50:26
【问题描述】:


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

我搜索了一下,发现我们需要使用 Shingle Matrix 过滤器来完成工作。有 Lucene 经验的人可以告诉我一个方法吗?

我所需要的只是它必须生成带有短语的自动完成单词。例如,如果我有这样的文档:“This is a long line with very long rant with too many words”,那么我应该能够生成像“long line”、“long rant”、“many词”等...

可能吗?

谢谢。

【问题讨论】:

标签: lucene spell-checking


【解决方案1】:

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

这为我完成了工作......

【讨论】:

  • 您好,您是如何做到这一点的?我一直在尝试获取多个单词,您的意思是建议功能吗?你能概述一下你为实现这个而采取的步骤,或者更好地发布更多代码吗?
【解决方案2】:

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

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 标识多字单元的最大长度

【讨论】:

    猜你喜欢
    • 2020-11-16
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多