1

我试图让 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" replacement="$1" replace="all" 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 中使用连字符/破折号取得了更大的成功?谢谢

4

1 回答 1

3

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

于 2012-11-26T20:23:53.957 回答