Сортировка полей со специальными символами в SoLR - PullRequest
0 голосов
/ 23 сентября 2011

Я новичок в индексации SoLR.Я хочу отсортировать поле местоположения с разными значениями. Оно также содержит значения, начинающиеся с 'sAmerica, #' Japan,% India и т. Д.

Теперь, когда я сортирую это поле, я хочу рассмотреть специальные символы, такие как's,' #,!, ~ и т. д. Я хочу сортировку, которая игнорирует эти символы и возвращает результаты, такие как Америка на 1-й позиции,% Индия на 2-й и # 'Япония на 3-й позиции.

Каксделать это возможно?Я использую PatternReplaceFilterFactory, но не знаю об этом.

  <analyzer type="query">
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory" />
    <filter class="solr.WordDelimiterFilterFactory" catenateWords="1"  />
    <filter class="solr.PatternReplaceFilterFactory" pattern="'s" replacement="" replace="all" />
  </analyzer>
</fieldType>

1 Ответ

1 голос
/ 23 сентября 2011

Если вы хотите игнорировать специальные символы, попробуйте использовать следующий тип поля.
Это приведет к тому, что слова будут записаны в нижнем регистре и будут вставлены слова, исключая все специальные символы.

    <fieldType name="string_sort" class="solr.TextField" positionIncrementGap="1">
        <analyzer type="index">
            <tokenizer class="solr.KeywordTokenizerFactory" />
            <filter class="solr.LowerCaseFilterFactory" />
            <filter class="solr.WordDelimiterFilterFactory" catenateWords="1" />
        </analyzer>
    </fieldType>

Однако это не сработает для sAmerica, поскольку s не является специальным символом.

<filter class="solr.PatternReplaceFilterFactory" pattern="'s" replacement="" replace="all" />

Если это фиксированный шаблон, его необходимо заменить перед разделителем слов на.

Редактировать - Вы используете этот конфиг?

<fieldType name="string_sort" class="solr.TextField" positionIncrementGap="1">
    <analyzer type="index">
        <tokenizer class="solr.KeywordTokenizerFactory" />
        <filter class="solr.LowerCaseFilterFactory" />
        <filter class="solr.PatternReplaceFilterFactory" pattern="'s" replacement="" replace="all" />
        <filter class="solr.WordDelimiterFilterFactory" catenateWords="1" />
    </analyzer>
</fieldType>

Протестировал следующее с помощью анализа, и он выдает следующие токены -

КТ - Алгарве
LCF - 'Salgarve
PRF - Алгарве
WDF - Алгарве

Можете ли вы проверить через анализ.

...