2010-02-09 9 views
2

J'utilise le facetage de solr et j'ai rencontré un problème que j'espérais pouvoir contourner l'utilisation des filtres.ToTitleCase dans solr pour arrêter SCREAMING CAPS dans Solr

Fondamentalement quelques fois un nom de ville viendra jusqu'à SOLR que

« CAMBRIDGE »

et est parfois ça passe comme

« Cambridge »

Je voulais utiliser un filtre dans Solr pour arrêter la version SCREAMING CAPS du nom de la ville. Il semble qu'il y ait un fitler pour faire tout le texte lower case.

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

Je me demandais si quelqu'un connaissait un filtre qui ignorera le premier caractère d'un mot et d'appliquer en minuscules au reste des personnages. Par exemple.

  • CAMBRIDGE >> Cambridge
  • À HULL >> KINGSTON Kingston Upon Hull

etc

Alternativement, s'il est facile d'écrire vos propres filtres .. un peu d'aide sur la façon de le faire serait apprécié .. Je ne suis pas une personne de Java ..

Merci

Répondre

2

AFAIK il n'y a pas de filtre intégré comme ça. Si vous voulez l'écrire, voyez LowerCaseFilterFactory et LowerCaseFilter pour la référence, il ne semble pas être très dur.

Ou vous pourriez faire ce côté client, c'est-à-dire dans SolrNet vous pourriez écrire un décorateur ISolrOperations qui fait les transformations nécessaires après la vraie requête, en utilisant ToTitleCase.

+0

J'utilise une version très ancienne de SolrNet .. Donc, je vais voir si je peux utiliser les ISolrOperations. Cependant, je pense qu'il serait peut-être temps d'apprendre java .. Je sais que C# donc la syntaxe ne devrait pas être un problème .. Merci Mauricio – CraftyFella

+1

ISolrOperations a été autour depuis la révision 1 :-) Quoi qu'il en soit, je recommande la mise à niveau vers la dernière version .. –

+0

Nice je vais deffo faire ça. – CraftyFella

1

Peut-être pourriez-vous utiliser le 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> 

avis, je n'ai pas testé le code ou solr.PatternReplaceCharFilterFactory, donc je ne suis pas sûr si cela fonctionne. Si vous avez besoin pour construire votre propre filtre ce guide pourrait être utile:

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

// John

+0

Merci .. je vais vérifier cela. – CraftyFella