我试图让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中使用连字符/破折号获得更多成功?感谢
答案 0 :(得分:3)
如果您的Solr使用的是最近的Lucene(3.x +我认为),您将需要使用ClassicAnalyzer而不是StandardAnalyzer,因为StandardAnalyzer现在总是将连字符视为分隔符。