当前位置: 首页 > 知识库问答 >
问题:

用java自定义分析器,使用edgeNGram标记过滤器

张翰音
2023-03-14
@Override
    public TokenStream tokenStream(String fieldName, Reader reader) {
        TokenStream stream = new KeywordTokenizer(reader);
        TokenStream result = new EdgeNGramTokenFilter(stream, EdgeNGramTokenFilter.Side.FRONT, 1, 30);
        //OffsetAttribute offsetAttribute = result.addAttribute(OffsetAttribute.class);
        CharTermAttribute charTermAttribute = result.addAttribute(CharTermAttribute.class);
        try {
            result.reset();
            while (result.incrementToken()) {
                //int startOffset = offsetAttribute.startOffset();
                //int endOffset = offsetAttribute.endOffset();
                System.out.println(charTermAttribute.toString());
            }
            result.end();
            result.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return result;
    }

但是它返回foo bar的标记下面。

f
fo
foo
foo 
foo b
foo ba
foo bar

让我知道我在代码中遗漏了什么。

共有1个答案

羊舌炯
2023-03-14

您需要使用StandardTokenizer,而不是KeywordTokenizer。后者将简单地将整个输入视为单个令牌,而前者将小写并将输入拆分为多个令牌。

所以改变这个:

    TokenStream stream = new KeywordTokenizer(reader);

对此:

    TokenStream stream = new StandardTokenizer(reader);
 类似资料:
  • 为了解决应用中展示逻辑的需求,Django的模板语言提供了各式各样的内建标签以及过滤器。然而,你或许会发现模板内建的这些工具集合不一定能全部满足你的功能需要。在Python中,你可以通过自定义标签或过滤器的方式扩展模板引擎的功能,并使用{{ load }}标签在你的模板中进行调用。 代码布局 自定义模板标签和过滤器必须位于Django 的某个应用中。如果它们与某个已存在的应用相关,那么将其与应用绑

  • 本文向大家介绍详解AngularJS中$filter过滤器使用(自定义过滤器),包括了详解AngularJS中$filter过滤器使用(自定义过滤器)的使用技巧和注意事项,需要的朋友参考一下 1.内置过滤器 2.自定义过滤器     套用上面的格式定义两个简单的自定义过滤器一个带条件的,一个不带条件的。 (1)【不带条件】,功能:固定转换(有时候项目中会遇到角色代号,门店编码什么的,但是显示的时候

  • 我基本上是在尝试禁用小写过滤器,以便能够对文本字段进行区分大小写的匹配。按照索引和分析器文档,我创建了以下不带小写过滤器的映射: PUT/my_索引 我启用fielddata,以便在之后检查标记化 放置我的索引/\u映射/\u文档 我测试了自定义分析器,以确保它不像预期的那样是小写的 后 /my_index/analyze 得到以下响应 太好了,事情并没有像我想的那样变小。现在我试着插入相同的文本

  • 演示在网关追加一个header public class CustomFilter implements GlobalFilter, Ordered { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { // 演示在网关追加heade

  • SOFARPC 提供了一套良好的可扩展性机制,为各个模块提供 SPI 的能力。 SOFARPC 对请求与响应的过滤链处理方式是通过多个过滤器 Filter 来进行具体的拦截处理,该部分可由用户自定义 Filter 扩展,自定义 Filter 的执行顺序在内置 Filter 之后。具体方式如下: Bolt Filter 新建自定义 Filter 。 public class CustomFilter

  • 问题内容: 我正在尝试找出使用TypeScript创建自定义角度过滤器的最佳方法。 我看到的所有代码示例都使用类似以下内容的代码: …可以,但是由于我想将所有过滤器代码分开而显得有些混乱。所以我想知道如何将过滤器声明为一个单独的文件(例如,filters / reverse- filter.ts),这样我就可以创建它: …以与控制器,服务等相同的方式 TS和Angular的文档在地面上似乎很薄,尤