2012-06-14 83 views
1

我使用UAX29URLEmailTokenizerFactory標記器索引SOLR中的一些URI。問題是我的一些URI包含加號字符,SOLR將其解釋爲空格並分割URI。這個問題是否可以通過巧妙的逃避'+'字符來解決?我在分析儀中嘗試了'+',但得到了相同的結果。 這裏是一個域的我確切配置:領先你的分析儀的SOLR索引加字符

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.UAX29URLEmailTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.UAX29URLEmailTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

回答

0

我想出的解決方案最終使用了上面提出的CharacterFilter。訣竅是用編碼字符'%2B'替換它。這具有將URI保持爲單個令牌並將其以適當狀態返回給我的應用程序的效果 - 作爲「+」。這裏是我想出的字段類型定義:

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="\+" replacement="%2B"/> 
    <tokenizer class="solr.UAX29URLEmailTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
    <!-- in this example, we will only use synonyms at query time 
    <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/> 
    --> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
    <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="\+" replacement="%2B"/> 
    <tokenizer class="solr.UAX29URLEmailTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 
3

可以使用CharacterFilter(如PatternReplaceCharFilterFactory)。這link有一些很好的信息。我能想到的一個解決方案是用其他角色替換+角色 - 然後當您提供此鏈接時,請記住將其替換回來。

要研究的另一件事是,用一個加號(%2B)的URL編碼值替換它,並查看分析器是否將它視爲空間。

+0

感謝您的想法,它通過將'+'字符替換爲'%2B' – kpentchev