【发布时间】:2015-07-28 09:34:53
【问题描述】:
我现在正在实施一些基于 Solr 的解决方案,但我被困在一个点上。我正在尝试采用这样的方式:IM extractor smooth wire 1.5x60cm 并将其拆分为:IM extractor smooth wire 1.5 60 cm
当然,多亏了 StandardTokenizerFactory,基于单词的部分很容易工作。轻松活泼的。症结在于尺寸。有时会有 12 毫米 x 15 毫米,其中两个尺寸都有与合格编号相关的规定测量类型 (mm)。其他时候,它们会像我的示例一样一起运行。
因此,WordDelimiterFilter 似乎可以派上用场,帮助将 numeric->alpha 序列分解为 12 和 mm。但是,问题在于它将1.5 分解为1 和5,将. 视为分隔符。
我已经尝试过 CharPatternReplacement 以及将这些模式添加到 WordDelimiterFilter 以忽略的受保护字(例如,我让“QQ”使用模式(\d+)[.](\d+) 替换数字之间的任何句点)但到目前为止我没有尝试过让我实现了目标标记化。
我可以在受保护的单词文件中使用正则表达式吗?是否有一个我没有考虑过的过滤器可以帮助我拆分 mm 但不能拆分 1.5?
感谢您的任何想法!
更新 我想出了一个解决方案,但它并不像我希望的那样优雅。它只是一个 PatternReplace CharFilters 像这样的堆叠
<!-- space in place of mm -->
<charFilter class="solr.PatternReplaceCharFilterFactory" pattern="(\d+)(mm|MM)" replacement="$1 $2"/>
<!-- space in place of in -->
<charFilter class="solr.PatternReplaceCharFilterFactory" pattern="(\d+)(in|IN)" replacement="$1 $2"/>
<!-- space in place of cm -->
<charFilter class="solr.PatternReplaceCharFilterFactory" pattern="(\d+)(cm|CM)" replacement="$1 $2"/>
它实现了我的目标,但如果你有想法,我当然愿意接受任何更好的方法来解决这个问题。
谢谢!
【问题讨论】: