在Solr Lucene中用连字符/破折号进行挑战

时间:2012-11-26 19:16:16

标签: solr lucene hyphen

我试图让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”/&GT;

不会解析1-1234567

所以它看起来只是连字符的一个问题。我试过 - (转义)和[ - ]以及\ 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"/>

带映射:

“ - ”=&gt; “Z”

然后

“z”=&gt; “ - ”

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

有没有人在Solr / Lucene中使用连字符/破折号获得更多成功?感谢

1 个答案:

答案 0 :(得分:3)

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