【发布时间】:2013-03-25 03:04:11
【问题描述】:
Solr 中是否有一个标记器/过滤器可以将一些短语(我猜是文件的形式)索引为单个标记?此外,任何关于将其放在分析器链中的位置的建议都会很棒。
【问题讨论】:
标签: solr
Solr 中是否有一个标记器/过滤器可以将一些短语(我猜是文件的形式)索引为单个标记?此外,任何关于将其放在分析器链中的位置的建议都会很棒。
【问题讨论】:
标签: solr
SynonymFilterFactory 应该对您有所帮助。以下是该页面中的示例:
#Explicit mappings match any token sequence on the LHS of "=>"
#and replace with all alternatives on the RHS. These types of mappings
#ignore the expand parameter in the schema.
#Examples:
i-pod, i pod => ipod
sea biscuit, sea biscit => seabiscuit
在索引时,左侧的短语被右侧的单个标记替换。将您的映射存储在一个名为 syn.txt 的文件中,您可以拥有如下分析器链(再次来自 solr wiki 链接):
<fieldtype name="syn" class="solr.TextField">
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="syn.txt"
ignoreCase="true" expand="false"/>
</analyzer>
</fieldtype>
【讨论】:
new york => newyork 保留在 syn.txt 中并且不将其拆分以在索引时间分析器链中进一步创建任何令牌,则搜索 new 或 york不会匹配。但是,要匹配包含new york 的文档,用户必须发出短语查询“new york”,并且您也应该在查询时使用同义词过滤器。并且返回的文档将包含newyork 没有空格。顺便说一句,我在 google 中搜索了new,它在前 10 名中给出了new york times,所以它毕竟不是太糟糕了吗? :-)
您需要为此使用TokenizerFactory。
如果你也想检测句子,那么你可以查看 solr.UAX29URLEmailTokenizerFactory。
如果输入是特定模式,您可以使用 solr.PatternTokenizerFactory。
如果您想将整个输入索引为一个字段,您可以使用 solr.KeywordTokenizerFactory。
【讨论】: