Заголовок в solr, чтобы перестать ВЫКРИКИВАТЬ ЗАГЛАВНЫЕ буквы в Solr

StackOverflow https://stackoverflow.com/questions/2230376

  •  19-09-2019
  •  | 
  •  

Вопрос

Я использую огранку solr и столкнулся с проблемой, которую, как я надеялся, смогу обойти с помощью фильтров.

В принципе, иногда название города передается в SOLR как

"КЕМБРИДЖ"

и когда-нибудь это проявится как

"Кембридж"

Я хотел использовать фильтр в Solr, чтобы остановить использование КРИЧАЩЕЙ ЗАГЛАВНОЙ версии названия города.Кажется, есть приспособитель для создания всего текста нижний регистр.

<!-- A text field that only sorts out casing for faceting -->
    <fieldType name="text_facet" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
  <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
      <analyzer type="query">
  <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>

Мне было интересно, знает ли кто-нибудь о фильтре, который игнорирует Первый символ слова и применяет нижний регистр к остальным символам.Например.

  • КЕМБРИДЖ >> Кембридж
  • Кингстон-Апон-ХАЛЛ >> Кингстон-Апон-Халл

и т.д.

В качестве альтернативы, если это легко, можно написать свои собственные фильтры..мы были бы признательны за некоторую помощь в том, как это сделать..Я не сторонник Java..

Спасибо

Это было полезно?

Решение

AFAIK, такого встроенного фильтра нет.Если вы хотите написать это, смотрите Фабрика фильтров в нижнем регистре и Фильтр нижнего регистра для справки, это, кажется, не очень сложно.

Или вы могли бы сделать это на стороне клиента, т. е.в SolrNet вы могли бы написать декоратор ISolrOperations, который выполняет необходимые преобразования после реального запроса, используя Заголовок сообщения.

Другие советы

Возможно, вы могли бы воспользоваться solr.PatternReplaceCharFilterFactory?

<fieldType name="textCharNorm" class="solr.TextField">
  <analyzer>
    <filter class="solr.LowerCaseFilterFactory"/>
    <charFilter class="solr.PatternReplaceCharFilterFactory"
                pattern="([^\s]{1})([^\s]*)" replaceWith="\U$1\L$2"/>
  </analyzer>
</fieldType>

Обратите внимание, я не тестировал код или solr.PatternReplaceCharFilterFactory, поэтому я не уверен, работает ли это.Если вам нужно создать свой собственный фильтр, это руководство может быть полезным:

http://robotlibrarian.billdueber.com/building-a-solr-text-filter-for-normalizing-data/

// Джон

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top