【问题标题】:What sort of filter to use for matching something like OCallaghan with O'Callaghan? [closed]使用什么样的过滤器来匹配像 OCallaghan 和 O'Callaghan 这样的东西? [关闭]
【发布时间】:2012-06-08 21:38:04
【问题描述】:

谁能给我指出一个像这样规范化标记的过滤器?

L.A. Reid -> LA Reid
O'Callaghan -> OCallaghan

搜索LA Reid 将匹配L.A. Reid

【问题讨论】:

  • 您能解释一下为什么 StandardAnalyzer 不为您做这件事吗?似乎符合要求。
  • 我尝试了标准分词器,但它对我不起作用。
  • “你试过什么”问题失败。

标签: search filter lucene elasticsearch


【解决方案1】:

您不能对 StandardAnalyzer 的输出使用过滤器,因为 StandardAnalyzer 会在您的过滤器有机会组合标记之前去除标点符号。

您可以通过修改标准分析器来创建自己的分析器。 StandardAnalyzer 使用JFlex 创建分词器。源jflex文件是here,我没试过,不过你可以改一下这一行,

ALetter = ([\p{WB:ALetter}] | {ALetterSupp})

类似于,

ALetter = ([\p{WB:ALetter}] | {ALetterSupp} | "." | "'" )

您还需要更改 jflex 文件中的类名和包声明。完成此操作后,使用 jflex 生成新的分析器。

分析器将生成像L.A. 这样的标记,因此将分析器的输出传递给TokenFilter,从标记中去除特殊字符,查看ISOLatin1AccentFilter 示例代码。

【讨论】:

    猜你喜欢
    • 2017-01-31
    • 2012-05-16
    • 1970-01-01
    • 2020-10-24
    • 2010-11-26
    • 1970-01-01
    • 2021-07-12
    • 2013-05-02
    • 1970-01-01
    相关资源
    最近更新 更多