【发布时间】:2020-01-29 09:45:40
【问题描述】:
我正在尝试将 15.6" 搜索转换为 15.6 inch。想法是首先将15.6" 替换为15.6 ",然后将" 与同义词规则" => inch 匹配。
我创建了类型定义:
<fieldType name="text_de" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.PatternReplaceFilterFactory" pattern='^([0-9]+([,.][0-9]+)?)(")$' replacement="$1 $3" />
<filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" />
</analyzer>
</fieldType>
但它不起作用!如果我输入15.6" 我得到15.6 ",但是当我输入15.6 " 我得到我想要的 - 15.6 inch。
为什么它不起作用?我错过了什么吗?
编辑:
【问题讨论】:
-
在这种情况下你不能用
$1 inch代替它,而不是通过同义词吗?使用 Solr 管理下的Analysis页面来查看每个步骤的令牌是如何处理的——它应该能够告诉你在 patternreplacefilter 完成后一切都是什么样子。看起来有子组而不是子组,所以$3可能是错误的,除非你移动结尾))。 -
我想我可以,但我可能想稍后将 PatternReplaceFilter 用于
"以外的字符。另一方面,上面的方法似乎完全合乎逻辑,除了它不起作用,所以我想知道它背后是否有一些推理...... -
这就是为什么您要使用 Solr 管理员的分析页面来查看链中每个步骤的确切情况 - 届时问题应该会很明显。,
-
感谢您的关注。我现在使用 Solr 分析编辑了我的帖子。我之前已经做过,但无法从中推断出任何东西。
-
我想我现在明白了。 PatternFilter 之后
15.6 "还是一个token,显然15.6 "和"是不一样的。有没有办法解决这个问题?