2012-05-18 1 views

답변

7

아는 한, 기존 SynonymFilterFactory로이를 수행 할 방법이 없습니다. 그러나 다음은이 동작을 얻는 데 사용할 수있는 속임수입니다.

필드가 title이라고 가정 해 보겠습니다. 이 사본 인 다른 필드를 작성하십시오 (예 : title_synonyms). 이제는 SynonymFilterFactory가 title_synonyms에 대해서만 분석기로 사용되는지 확인하십시오 (두 필드에 대해 서로 다른 필드 유형 (예 : texttext_synonyms)을 사용하면 SynonymFilterFactory가 분석기로 사용됩니다. 이 두 필드를 모두 검색하지만 title에 대해 더 높은 부스트를 부여하면 title_synonyms이됩니다. 당신이 dismax를 사용하는 경우

<copyField source="title" dest="title_synonyms"/> 

: 여기

<fieldType name="text" class="solr.TextField"> 
     <analyzer type="index"> 
      <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/> 
      <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
     </analyzer> 
     <analyzer type="query"> 
      <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/> 
      <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
     </analyzer> 
    </fieldType> 

    <fieldType name="text_synonyms" class="solr.TextField"> 
     <analyzer type="index"> 
      <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
      <filter class="solr.SynonymFilterFactory" synonyms="synonyms_index.txt" ignoreCase="true" expand="true"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/> 
      <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
     </analyzer> 
     <analyzer type="query"> 
      <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
      <filter class="solr.SynonymFilterFactory" synonyms="synonyms_query.txt" ignoreCase="true" expand="true"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/> 
      <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
     </analyzer> 
    </fieldType> 

그리고있는 샘플 필드 정의 :

<field name="title" type="text" stored="false" 
      required="true" multiValued="true"/> 
    <field name="title_synonyms" type="text_synonyms" stored="false" 
      required="true" multiValued="true"/> 

복사 title 필드 title_synonyms 여기

샘플 필드 유형 정의입니다 , 당신은 이들에 다른 부스트를 줄 수 있습니다. 다음과 같은 입력란 :

<str name="qf">title^10 title_synonyms^1</str> 
+0

정말 좋은 아이디어! 하지만 내 경우에는 동의어가 필요한 약 10 개의 필드가 있습니다 ... 다른 해결 방법이없는 경우이를 수행합니다 ... solr 패치 등 – yura

+2

모든 필드에 대해 동일한 동의어 파일을 사용하는 경우 모두를 복사 할 수 있습니다. 그들을 하나의 공통 동의어 필드로 - 각 필드에 해당하는 하나의 동의어 필드가 필요하지 않습니다. –

+1

그러나 모든 필드에 세분화 된 가중치를 사용합니다. 제목과 동의어가 설명 등의 동의어보다 더 중요합니다. – yura

관련 문제