java - 在 Solr 中组合多个标记器

标签 java solr

我正在尝试将 LetterTokenizerFactoryWhitespaceTokenizerFactory 结合起来,但无法找到如何在不使用 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/

相关文章:

java - 如何返回此方法的下一个 for 循环项?

java - "int pix = (0xff & ((int) first[ij])); "是什么意思?

solr - 何时在Sitecore 7版本中绝对在Lucene上使用SOLR?

c# - QA 环境中的 SOLR 错误 - Sitecore

regex - SOLR 过滤查询 (fq) 不适用于包含冒号的字符串 [: ] or Slash [/]?

java - Solr SearchComponent 获取所有文档

java - 试图获取 rake 太阳黑子 :solr:run to execute

java - 从谷歌日历获取信息时获取 GoogleJsonResponseException 401 未经授权的异常

java - Spring 应用程序在 Tomcat 上部署失败 : whats wrong with applicationContext?

schema - SOLR架构设计问题: field absence or boolean field?