2016-11-29 87 views
0

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

感谢

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

+0

如果它的工作与'WhiteSpaceTokenizer'为什么你想改变为不符合你想要的方式? – femtoRgon

+1

我最初的猜测是StandardTokenizer也会在$上分裂,所以首先要测试这个假设 - 如果是这样,你不会得到10美元作为一个单一的令牌来处理,并且可能不得不通过在处理之前生成带状疱疹来扩展它与链接问题中的方式相同。使用分析页面查看示例文本中发生的情况。 – MatsLindh

+0

看起来像StandardTokenizer会丢弃$货币符号。我尝试在ShingleFilterFactory中添加,但这也没有帮助。我也试过ClassicTokenizer,无济于事。 –

回答

0

通过邮寄到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>