2014-10-09 3 views
1

형태소 분석과 일부 개선 된 기능을 사용하기를 희망하여 일부 필드를 text_general에서 text_en으로 변경했지만 변경 사항이 부각되었습니다. 그것은 말미가없는 단어 (즉 줄기 버전이 "아동"과 같은 단어 자체와 동일한 단어) 만 강조 표시하려는 것으로 보입니다.Solr : 줄 바꿈 중단 강조 표시

나는 기본 fieldType 정의를 사용하고 있습니다 :

<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" 
      ignoreCase="true" 
      words="lang/stopwords_en.txt" 
      /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.EnglishPossessiveFilterFactory"/> 
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
    <filter class="solr.PorterStemFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
    <filter class="solr.StopFilterFactory" 
      ignoreCase="true" 
      words="lang/stopwords_en.txt" 
      /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.EnglishPossessiveFilterFactory"/> 
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
    <filter class="solr.PorterStemFilterFactory"/> 
    </analyzer> 
</fieldType> 

을 그리고 내 쿼리 hl.fl=title&hl=true으로 강조 가능하게한다. 이것이 중요하다면 이것은 또한 패싯 검색입니다.

내가 말했듯이, "아동"과 같은 언성 단어 만 강조 표시됩니다. text_en 정의에서 인덱스 분석기에서 형태소 분석 필터를 제거하면 (쿼리 분석기는 효과가없는 것으로 나타남), 중지 단어를 제외한 모든 일치 단어가 강조 표시됩니다. 또한, text_enEnglishMinimalStemFilterFactory으로 변경하면 더 많은 단어가 강조 표시됩니다.이 단어는 포터 줄기에 의해 줄기가 있지만이 옆에 줄기가있는 것으로 간주됩니다. 그러한 단어의 예로는 "strides"가 있습니다.

무슨 일이 일어나는지 아는 사람 있습니까?

+0

같은 문제가있어 어떤 도움을 주시면 감사하겠습니다. – mindfxxxedCoder

+0

혹시이 문제를 해결 했습니까? –

+0

아니요 형태소 분석을 사용하지 않도록 설정 :( – nvioli

답변

1

나는이 질문이 죽었다는 것을 알고있다. 그러나이 책을 읽는 누군가는 나의 해결책이다.

먼저 "hlq"를 사용하는 경우에만이 동작이 발생합니다. 강조 표시와 검색 쿼리에 "q"를 사용하는 경우에는 문제가 없습니다. 그러나 당신이 당신의 응용 프로그램에 필요한 아니라면, 당신이 수행 할 수 있습니다, 당신의 분석기 체인에서

을 인덱싱 및 쿼리 모두이 추가 :

<!-- will keep both the stemmed and unstemmed versions from any stemmer -->

<filter class="solr.KeywordRepeatFilterFactory" />

<!-- put your stemmer here, something like: -->

<filter class="solr.SnowballPorterFilterFactory"/>

<!-- if unstemmed == stemmed, only keep one -->

<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>

기본적으로,이 후 중복 제거의 형태소 unstemmed 버전으로 모든 단어를 유지합니다. 강조 표시는 문서와 일치합니다 (hlq로 입력 된 EXACT 문구와 여전히 일치합니다. q는 동일한 줄기와 일치하므로 공백 강조 표시가있는 q가 반환하는 문서가 여전히있을 수 있습니다)