【问题标题】:Using StandardTokenizerFactory with currency将 StandardTokenizerFactory 与货币一起使用
【发布时间】:2016-11-29 23:19:33
【问题描述】:

此问题中描述的 fieldType 配置可用于检测货币(例如,包含 "$30" 的文档)。但是,我们希望使用 StandardTokenizerFactory,而不是 WhiteSpaceTokenizerFactory——并且这个配置使用 StandardTokenizerFactory 返回误报(例如,包含数字 30 的文档没有 $ 符号)。解决办法是什么?

谢谢

How do I find documents containing digits and dollar signs in Solr?

【问题讨论】:

  • 如果它与WhiteSpaceTokenizer 一起工作,您为什么要更改为无法按您想要的方式工作的那个?
  • 我最初的猜测是 StandardTokenizer 也会在 $ 上拆分,因此请先测试该假设 - 如果确实如此,您将不会获得 $10 作为单个令牌来处理,并且可能必须扩展它通过在以与链接问题相同的方式处理它们之前生成带状疱疹。使用分析页面查看您的示例文本发生了什么。
  • 看起来 StandardTokenizer 丢弃了 $ 货币符号。我尝试添加一个 ShingleFilterFactory 但这也无济于事。我也尝试了 ClassicTokenizer,但无济于事。

标签: solr lucene


【解决方案1】:

已通过 solr 用户组的帖子解决 http://lucene.472066.n3.nabble.com/How-to-use-the-StandardTokenizer-with-currency-td4308072.html#a4308097

这是我的配置

<!-- VB - Just like text_general, but supports $ currency matching and autoGeneratePhraseQueries -->
<fieldType name="text_curr_3" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
  <analyzer type="index">
    <charFilter class="solr.MappingCharFilterFactory" mapping="mapping.txt"/>
    <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="\$" replacement="xxdollarxx"/>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.PatternReplaceFilterFactory" pattern="xxdollarxx" replacement="\$" replace="all"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/>
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" types="word-delim-types.txt" />
    <filter class="solr.LowerCaseFilterFactory"/>
 </analyzer>
  <analyzer type="query">
    <charFilter class="solr.MappingCharFilterFactory" mapping="mapping.txt"/>
    <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="\$" replacement="xxdollarxx"/>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.PatternReplaceFilterFactory" pattern="xxdollarxx" replacement="\$" replace="all"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/>
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"  types="word-delim-types.txt" />
    <filter class="solr.LowerCaseFilterFactory"/>   
  </analyzer>
</fieldType>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-21
    • 1970-01-01
    相关资源
    最近更新 更多