加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如何在我的Lucene应用程序中使用ASCIIFoldingFilter?

发布时间:2020-12-15 05:16:40 所属栏目:Java 来源:网络整理
导读:我有一个标准的Lucene应用程序,它从索引中搜索.我的索引包含很多法语术语,我想使用ASCIIFoldingFilter. 我做了很多搜索,我不知道如何使用它.构造函数接受一个TokenStream对象,当你发送一个字段时,我是否在分析器上调用检索TokenStream的方法?那我该怎么办?
我有一个标准的Lucene应用程序,它从索引中搜索.我的索引包含很多法语术语,我想使用ASCIIFoldingFilter.

我做了很多搜索,我不知道如何使用它.构造函数接受一个TokenStream对象,当你发送一个字段时,我是否在分析器上调用检索TokenStream的方法?那我该怎么办?有人能指出我正在使用TokenFilter的例子吗?谢谢.

解决方法

令牌过滤器 – 比如ASCIIFoldingFilter – 在它们的基础上是TokenStream,因此它们是Analyzer主要通过使用以下方法返回的东西:

public abstract TokenStream tokenStream(String fieldName,Reader reader);

正如您所注意到的,过滤器将TokenStream作为输入.它们像包装一样,或者更准确地说,就像他们的输入一样decorators.这意味着它们增强了包含的TokenStream的行为,执行它们的操作和包含输入的操作.

您可以找到解释here.它不是直接引用ASCIIFoldingFilter,但适用相同的原则.基本上,你在其中创建一个类似这样的自定义分析器(剥离示例):

public class CustomAnalyzer extends Analyzer {
  // other content omitted
  // ...
  public TokenStream tokenStream(String fieldName,Reader reader) {
    TokenStream result = new StandardTokenizer(reader);
    result = new StandardFilter(result);
    result = new LowerCaseFilter(result);
    // etc etc ...
    result = new StopFilter(result,yourSetOfStopWords);
    result = new ASCIIFoldingFilter(result);
    return result;
  }
  // ...
}

TokenFilter和Tokenizer都是TokenStream的子类.

还要记住,您必须在索引和搜索中使用相同的自定义分析器,否则您的查询可能会得到不正确的结果.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读