ToTitleCase в Solr, чтобы остановить кричащие колпачки в Solr - PullRequest
2 голосов
/ 09 февраля 2010

Я использую грань 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-человек ..

спасибо

Ответы [ 2 ]

2 голосов
/ 09 февраля 2010

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

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

1 голос
/ 22 июня 2010

Возможно, вы могли бы использовать 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/

// John

...