2012-06-14 3 views
1

UAX29URLEmailTokenizerFactory 토크 나이저를 사용하여 SOLR의 일부 URI를 인덱싱하고 있습니다. 문제는 내 URI 중 일부가 공백으로 해석하고 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