我正在尝试将 LetterTokenizerFactory
与 WhitespaceTokenizerFactory
结合起来,但无法找到如何在不使用 copyField
复制内容的情况下执行此操作。
让我描述一下我的想法:
- 我有两个文本条目,例如H&M 和惠普
- 用户应该能够找到 H&M 输入
h&m
- 我使用WhitespaceTokenizerFactory
来实现此目的,无需在特殊字符上拆分 token - 用户应该能够找到 Hewlett-Packard 输入“packard” -
LetterTokenizerFactory
适合这种情况, token 按特殊字符拆分 - 现在我想结合这两个标记器
如何在不使用不同标记器工厂声明两种不同类型然后将值复制到第二种类型的字段的情况下实现它?
最佳答案
您可以使用 WhitespaceTokenizerFactory 作为主分词器,然后添加 WordDelimiterGraphFilter将您的代币进一步拆分为更小的代币。
来自 WordDelimiterGraphFilter 的示例(以前名为 WordDelimiterFilter,但现在已弃用 - 因此名称将取决于您使用的 Solr 版本):
Non-alphanumeric characters (discarded): "hot-spot" -> "hot", "spot"
这将使帕卡德能够与休利特相匹配。请注意,这也将允许“m”匹配 h&m
,因为您要拆分非字母数字字符。您可以使用过滤器的 protected
设置来指定不应触及的单词列表,或者更好的是,如果您希望包含 &
的所有内容都保持不变,使用 types
参数重新定义 &
应该被视为什么类型。
关于java - 在 Solr 中组合多个标记器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45350164/