当前位置: 首页 > 面试题库 >

使用Edge N Gram分析器和char过滤器创建分析器,用新行替换空间

钱渊
2023-03-14
问题内容

我有以下类型的文本中来了。 foo barhello world等我使用边缘NGRAM分词器,并使用分析它产生以下令牌API创建的分析。

{
  "tokens": [
    {
      "token": "f",
      "start_offset": 0,
      "end_offset": 1,
      "type": "word",
      "position": 1
    },
    {
      "token": "fo",
      "start_offset": 0,
      "end_offset": 2,
      "type": "word",
      "position": 2
    },
    {
      "token": "foo",
      "start_offset": 0,
      "end_offset": 3,
      "type": "word",
      "position": 3
    },
    {
      "token": "b",
      "start_offset": 4,
      "end_offset": 5,
      "type": "word",
      "position": 4
    },
    {
      "token": "ba",
      "start_offset": 4,
      "end_offset": 6,
      "type": "word",
      "position": 5
    },
    {
      "token": "bar",
      "start_offset": 4,
      "end_offset": 7,
      "type": "word",
      "position": 6
    }
  ]
}

但是,当我在代码中将文本“ foo bar”传递给方法 tokenStream时 ,它将在 foo bar的 令牌下面创建。

f,fo,foo,foo,foo b,foo ba,foo bar。

这会导致 分析 api 返回的令牌不匹配。我想知道如何 添加一个char过滤器,该过滤器可删除文本中的空格,并对文本中的各个术语应用Edge
NGram标记器。

因此,在 foo bar 示例中,它应该在令牌下面创建。当我调用 tokenStream 方法时。

f,fo,foo,b,ba,bar。

我尝试将char过滤器添加到创建分析器的Java代码中。下面是它的代码。

@Override
    public TokenStream tokenStream(String fieldName, Reader reader) {
        NormalizeCharMap normalizeCharMap = new NormalizeCharMap();
        normalizeCharMap.add(" ", "\\u2424");
        Reader replaceDots = new MappingCharFilter(normalizeCharMap, reader);
        TokenStream result = new EdgeNGramTokenizer(replaceDots, EdgeNGramTokenizer.DEFAULT_SIDE, 1, 30);
        return result;
    }

lu2424事实如此。还请让我知道我的分析器代码是否正确?


问题答案:

您使用分析API测试的是edge-ngram
令牌过滤器
,它不同于edge-ngram
令牌生成器

在代码中,如果您希望代码中的行为与使用analyze
API测试的行为相同EdgeNGramTokenizerEdgeNGramTokenFilter则需要替换为。



 类似资料:
  • 我有下面类型的文本进来。、等。我使用Edge NGram标记器和它在标记下面创建的分析api创建了一个分析器。

  • 但是它返回的标记下面。 让我知道我在代码中遗漏了什么。

  • 本文向大家介绍AngularJS过滤器filter用法分析,包括了AngularJS过滤器filter用法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了AngularJS过滤器filter用法。分享给大家供大家参考,具体如下: 在开发中,经常会遇到这样的场景 如用户的性别分为“男”和“女”,在数据库中保存的值为1和0,用户在查看自己的性别时后端返回的值自然是1或0,前端要转换为“男”

  • 使用分配分析器工具来查找未被正确地垃圾收回收,并继续保留在内存中的对象。 分配分析器如何工作 allocation profiler(分配分析器)结合了堆分析器中快照的详细信息以及Timeline(时间轴)面板的增量更新以及追踪信息。与这些工具相似,追踪对象堆的分配过程包括开始记录,执行一系列操作,以及停止记录并分析。 分配分析器在记录中周期性生成快照(频率为每50毫秒),并且在记录最后停止时也会

  • 本文向大家介绍AngularJS过滤器filter用法实例分析,包括了AngularJS过滤器filter用法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了AngularJS过滤器filter用法。分享给大家供大家参考,具体如下: 这节我们来看看angularjs的过滤器filter。 在我们开发中经常需要在页面显示给用户的信息需要一定处理格式化,才能显示给用户。比如时间本地化,

  • 问题内容: 我已经下载了包含技能分类法的onet数据集,并将其上传到了Elasticsearch中。在技​​能分类中,有一些技能,例如c ++ 、. net,C#。我想给c#并且只获得c#的技能。通过检查一些链接,我已如下设置索引的映射和设置。 当我使用如下查询 我正在获得所有具有“ c”的技能 当我使用以下查询时假设应用了分析器 我得到空输出。我是否正确包括了分析仪,或者我的查询错误? 问题答案