search - 使用什么样的过滤器来匹配像 OCallaghan 和 O'Callaghan 这样的东西?

标签 search filter lucene elasticsearch

<分区>

谁能告诉我一个像这样规范化标记的过滤器?

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

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

最佳答案

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

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

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

比如,

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

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

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

关于search - 使用什么样的过滤器来匹配像 OCallaghan 和 O'Callaghan 这样的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10887662/

相关文章:

java - 高级搜索 Java 库

php - 需要有关 mysql 查询的帮助,以根据请求使用不同的可能组合搜索所有列

search - 波兰人寻找 sphinx ?

php - 如何使用php搜索文件

Oracle 带过滤器的全外连接 (ANSI) 未按预期工作

java - 尝试使用 Java 将 OData $filter 解析为其名称-值对

JavaFX TextField 自动建议

javascript - 在js中不使用htaccess将搜索从/?s=searchterm更改为/searchterm

elasticsearch - 如何在Elasticsearch中将某些单词组合成 token ?

java - 如何使用Lucene实现拼音搜索?