2016-11-29 1 views
0

この質問に記載されているfieldType設定は通貨を検出するために機能します(「$ 30」を含むドキュメントなど)。ただし、WhiteSpaceTokenizerFactoryではなくStandardTokenizerFactoryを使用したい場合、この設定はStandardTokenizerFactory(例えば、$記号なしの数字30を含むdocs)で誤検出を返します。解決策は何ですか?なぜあなたが望むWhiteSpaceTokenizer`それは `で働いている場合はここStandardTokenizerFactoryを通貨で使用する

おかげ

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

+0

ですあなたが望むように動作しないものに変更するには? – 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>