나는 index_synonyms.txtSolr 동의어를 사용하면서 원래 용어를 더 늘릴 수있는 방법이 있습니까? 예를 들어
동의어 노트북, 넷북, 노트북 있을 때 좀 더 다음 동의어로 확장 원문을 강화하려는 넷북에 대한 사용자 검색? SynonymFilterFactory에서이를 지정하는 방법이 있습니까? 예를 들어 원래 용어를 두 번 사용하면 TF가 더 커집니다.
나는 index_synonyms.txtSolr 동의어를 사용하면서 원래 용어를 더 늘릴 수있는 방법이 있습니까? 예를 들어
동의어 노트북, 넷북, 노트북 있을 때 좀 더 다음 동의어로 확장 원문을 강화하려는 넷북에 대한 사용자 검색? SynonymFilterFactory에서이를 지정하는 방법이 있습니까? 예를 들어 원래 용어를 두 번 사용하면 TF가 더 커집니다.
아는 한, 기존 SynonymFilterFactory로이를 수행 할 방법이 없습니다. 그러나 다음은이 동작을 얻는 데 사용할 수있는 속임수입니다.
필드가 title
이라고 가정 해 보겠습니다. 이 사본 인 다른 필드를 작성하십시오 (예 : title_synonyms
). 이제는 SynonymFilterFactory가 title_synonyms
에 대해서만 분석기로 사용되는지 확인하십시오 (두 필드에 대해 서로 다른 필드 유형 (예 : text
및 text_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>
정말 좋은 아이디어! 하지만 내 경우에는 동의어가 필요한 약 10 개의 필드가 있습니다 ... 다른 해결 방법이없는 경우이를 수행합니다 ... solr 패치 등 – yura
모든 필드에 대해 동일한 동의어 파일을 사용하는 경우 모두를 복사 할 수 있습니다. 그들을 하나의 공통 동의어 필드로 - 각 필드에 해당하는 하나의 동의어 필드가 필요하지 않습니다. –
그러나 모든 필드에 세분화 된 가중치를 사용합니다. 제목과 동의어가 설명 등의 동의어보다 더 중요합니다. – yura