Soweit ich weiß, gibt es keine Möglichkeit, dies mit der vorhandenen SynonymFilterFactory zu tun. Aber das Folgen ist ein Trick, den Sie verwenden können, um dieses Verhalten zu erhalten.
Nehmen wir an, Ihr Feld heißt title
. Erstellen Sie ein anderes Feld, das eine Kopie davon ist, sagen Sie title_synonyms
. Stellen Sie jetzt sicher, dass SynonymFilterFactory nur als Analysator für title_synonyms
verwendet wird (Sie können dazu unterschiedliche Feldtypen für die beiden Felder verwenden, z. B. text
und text_synonyms
). Suchen Sie in diesen beiden Feldern, geben Sie aber title
einen höheren Boost als title_synonyms
.
Hier sind Beispieldefinitionen Typfeld:
<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>
Und sind hier Beispielfelddefinitionen:
<field name="title" type="text" stored="false"
required="true" multiValued="true"/>
<field name="title_synonyms" type="text_synonyms" stored="false"
required="true" multiValued="true"/>
Copy title
Feld title_synonyms
:
<copyField source="title" dest="title_synonyms"/>
Wenn Sie dismax
verwenden , können Sie verschiedene Aufstiege zu diesen geben Felder mögen so:
<str name="qf">title^10 title_synonyms^1</str>
Wirklich nette Idee! Aber in meinem Fall habe ich ungefähr 10 Felder, in denen Synonyme erforderlich sind, also ..., wenn es keine anderen Problemumgehungen gibt ... solr patches etc – yura
Wenn Sie die gleiche Synonymdatei für alle diese Felder verwenden, können Sie alle kopieren sie in ein gemeinsames Synonymfeld - Sie benötigen kein Synonymfeld für jedes Feld. –
Aber ich verwende feinkörniges Gewicht für alle Felder. So ist das Synonym für den Titel wichtiger als das Synonym für die Beschreibung usw. – yura