【问题标题】:Challenge with hyphens/dashes in Solr LuceneSolr Lucene 中的连字符/破折号挑战
【发布时间】:2012-11-14 07:47:52
【问题描述】:

我试图让 Solr 仅提取格式为 n-nnnnnnn 的票证的第二个 7 位数字部分

本来我希望把全票放在一起。根据文档,带数字的数字应该放在一起,但是在解决了这个问题一段时间并查看了代码之后,我认为情况并非如此。 Solr 总是生成两个术语。因此,我想我可以从第二部分获得更好的查询结果,而不是大量匹配 n- 的第一个数字。用 A 代替破折号:

    <charFilter class="solr.PatternReplaceCharFilterFactory"
      pattern="\b\d[A](\d\d\d\d\d\d\d)\b" replacement="$1" replace="all" 
      maxBlockChars="20000"/>

将解析 1A1234567 正常 但 -\b" 替换="$1" 替换="全部" maxBlockChars="20000"/>

不会解析 1-1234567

所以看起来只是连字符的问题。我试过 -(escaped) 和 [-] 和 \u002D 和 \x{45} 和 \x045 没有成功。

我尝试在它周围放置 char 过滤器:

   <charFilter class="solr.MappingCharFilterFactory" mapping="mapping.txt"/>
    <charFilter class="solr.PatternReplaceCharFilterFactory"
      pattern="\b\d[-](\d\d\d\d\d\d\d)\b" replacement="$1" replace="all" maxBlockChars="20000"/>
    <charFilter class="solr.MappingCharFilterFactory" mapping="mapping2.txt"/>

有映射:

"-" => "z"

然后

"z" => "-"

我看起来连字符在 Flex 标记化中被吃掉了,甚至不能用于 char 过滤器。

有没有人在 Solr/Lucene 中使用连字符/破折号取得了更大的成功?谢谢

【问题讨论】:

  • 通常,过滤器在分析器和标记器之后应用,所以是的,那些连字符已经消失了。我的问题是:这个字段是否需要像那样分析和标记化?如果它只是一个票号,那么我会说使用KeywordAnalyzer,或者将字段设置为StrField,或者其他类似的东西。
  • 听起来在构建 solr 文档的应用程序中可能更容易做到。

标签: solr lucene hyphen


【解决方案1】:

如果您的 Solr 使用的是最新的 Lucene(我认为是 3.x+),您将希望使用 ClassicAnalyzer 而不是 StandardAnalyzer,因为 StandardAnalyzer 现在总是将连字符视为分隔符。

【讨论】:

  • 感谢您的帮助。我们还将尝试仅使用未分析的基本字符串类型。
  • 了解这很好。但是,我们有许多索引字段,对于其中的大多数,我们需要使用 StandardAnalyzer。然后,我们将它们组合到查询门户的一个默认字段中。因此,用户输入的查询仍然会拆分第一部分并给出很多不需要的结果。我仍然对为什么 charFilters 不工作感到困惑,因为它们在标记器之前。添加它们看起来仍然很有必要。
猜你喜欢
  • 2015-09-11
  • 1970-01-01
  • 2015-02-26
  • 1970-01-01
  • 2014-06-25
  • 1970-01-01
  • 1970-01-01
  • 2011-03-27
  • 1970-01-01
相关资源
最近更新 更多