【发布时间】: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 文档的应用程序中可能更容易做到。