Вопрос по – Есть ли способ повысить оригинальный термин при использовании синонимов Solr?

11

Например, у меня есть синонимы: ноутбук, нетбук, ноутбук в index_synonyms.txt

Когда пользователь ищет нетбук, я хочу увеличить оригинальный текст, а не синонимы? Есть ли способ указать это в SynonymFilterFactory? Например, используйте оригинальный термин дважды, чтобы его TF был больш

Ваш Ответ

1   ответ
8

это невозможно сделать с помощью существующего SynonymFilterFactory. Но ниже приведен трюк, который вы можете использовать, чтобы получить такое поведение.

Допустим, твое поле называетсяtitle. Создайте другое поле, которое является копией этого, скажем,title_synonyms. Теперь убедитесь, что SynonymFilterFactory используется в качестве анализатора только дляtitle_synonyms (вы можете сделать это, используя разные типы полей для двух полей - скажем,text а такжеtext_synonyms). Поиск в обоих этих полях, но дает больший толчок кtitle чем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:

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

Если вы используетеdismax, вы можете дать разное усиление этим полям, например:

    <str name="qf">title^10 title_synonyms^1</str>
Многократный поиск слова проблематичен с синонимами времени запроса. Видеть : СинонимFilterFactory документация Th 0 mÄ s
Действительно хорошая идея! Но в моем случае у меня есть около 10 полей, в которых требуются синонимы, так что ... сделаю это, если других обходных путей нет ... solr patches и т.д. yura
Но я использую мелкозернистый вес для всех полей. Поэтому синоним заголовка важнее синонима описания и т. Д. yura
Может ли указанный буст установлен в XML-файле? как <str name = "qf" ... chncwang
Если вы используете один и тот же файл синонимов для всех этих полей, вы можете скопировать их все в одно общее поле синонимов - вам не нужно одно поле синонимов, соответствующее каждому полю. Siddhartha Reddy

Похожие вопросы