У кого-нибудь есть лучший способ поиска синонимов по нескольким ключевым словам в solr?

Я хочу использовать поиск синонимов в solr для нескольких ключевых слов. Но это не работает правильно.

Я установил синоним "multiterm" для "multerm" в synonym.txt. И я ожидаю, что Solr создаст фразу-запрос для "multiterm" точно так же, как "field:"multi term"~0, но "field:multi | поле:термин". Таким образом, он не может выполнять интимный поиск синонима с несколькими терминами.

У кого-нибудь есть лучший способ поиска синонимов по нескольким терминам в Solr? Помогите пожалуйста~


person user1396224    schedule 21.06.2013    source источник
comment
Можете ли вы поделиться своим schema.xml?   -  person JHS    schedule 21.06.2013


Ответы (1)


Вот как я работаю с многословными синонимами. В моем schema.xml определение fieldType выглядит так:

<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" tokenizer="solr.KeywordTokenizerFactory"/>

<fieldType name="custom_text_general" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
        <!-- We will use synonyms only at index time to keep querying fast-->
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" tokenizer="solr.KeywordTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.SnowballPorterFilterFactory" language="English" />
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
        <!-- We will use synonyms only at index time to keep querying fast
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        -->
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.SnowballPorterFilterFactory" language="English" />
    </analyzer>
</fieldType>

Несколько замечаний:

  • Я использую синонимы только во время индексации, чтобы запросы выполнялись быстро.
  • Я добавил KeywordTokenizerFactory, он обрабатывает все поле как один токен и не разделяет многословные синонимы.
  • Я добавил расширение = "истина". Если для расширения установлено значение true, синоним будет расширен до всех эквивалентных синонимов. Если оно ложно, все эквивалентные синонимы будут приведены к первому в списке.
  • Синонимы времени запроса закомментированы.
person Aujasvi Chitkara    schedule 21.06.2013