/ / ToTitleCase in solr, aby zatrzymać SCREAMING CAPS w Solr - lucene, solr, filterfactory

ToTitleCase w solr, aby zatrzymać SCREAMING CAPS w Solr - lucene, solr, filterfactory

Używam fasetowania solr i napotkałem problem, który miałem nadzieję, że mogę obejść za pomocą filtrów.

Zasadniczo czasami nazwa miasta przejdzie do SOLR as

„CAMBRIDGE”

i kiedyś to nastąpi

„Cambridge”

Chciałem użyć filtra w Solr, aby zatrzymać wersję nazwy miasta KRZYWE KAPTURY. Wygląda na to, że do napisania całego tekstu jest fitler małe litery.

<!-- 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>

Zastanawiałem się, czy ktokolwiek wiedział o filtrze, który zignoruje pierwszy znak słowa i zastosuje małe litery do pozostałych znaków. Na przykład.

  • CAMBRIDGE >> Cambridge
  • KingsTON Upon HULL >> Kingston Upon Hull

itp

Alternatywnie, jeśli łatwo jest napisać własne filtry .. pomoc w tym, jak to zrobić, byłby mile widziany .. Nie jestem osobą Java ..

Dzięki

Odpowiedzi:

2 dla odpowiedzi № 1

AFAIK nie ma takiego wbudowanego filtra. Jeśli chcesz to napisać, zobacz LowerCaseFilterFactory i LowerCaseFilter dla porównania, nie wydaje się to być bardzo trudne.

Lub możesz to zrobić po stronie klienta, tj. W SolrNet możesz napisać dekorator ISolrOperations, który dokonuje niezbędnych przekształceń po prawdziwym zapytaniu, używając ToTitleCase.


1 dla odpowiedzi nr 2

Być może mógłbyś skorzystać z solr.PatternReplaceCharFilterFactory?

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

Zauważ, że nie testowałem kodu ani solr.PatternReplaceCharFilterFactory, więc nie jestem pewien, czy to działa. Jeśli potrzebujesz zbudować własny filtr, ten poradnik może być przydatny:

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

// Jan