Domanda

Sto usando sfaccettatura del solr e ho incontrato un problema che mi è stato sperando di poter andare in giro usando i filtri.

In pratica alcune volte un nome di città arriveranno fino alla SOLR come

"CAMBRIDGE"

ed è qualche volta si arriverà attraverso come

"Cambridge"

ho voluto usare un filtro in Solr per fermare le urla CAPS versione del nome della città. Sembra che ci sia un fitler di rendere tutto il testo minuscolo .

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

Mi chiedevo se qualcuno sapesse di un filtro che ignorerà il primo carattere di una parola e di applicare in minuscolo al resto dei personaggi. Per es.

  • CAMBRIDGE >> Cambridge
  • Kingston upon Hull >> Kingston upon Hull

etc

In alternativa, se è facile scrivere i propri filtri .. un po 'di aiuto su come farlo sarebbe apprezzato .. Io non sono una persona Java ..

Grazie

È stato utile?

Soluzione

Per quanto ne sappia non v'è filtro incorporato del genere. Se si vuole scrivere, vedere LowerCaseFilterFactory e LowerCaseFilter di rinvio, non sembra essere molto difficile.

Oppure si potrebbe fare questo lato client, cioè in SolrNet si potrebbe scrivere un decoratore ISolrOperations che fa le trasformazioni necessarie dopo la vera e propria interrogazione, utilizzando ToTitleCase .

Altri suggerimenti

Forse si potrebbe fare uso della 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>

Si noti, non ho ancora testato il codice o solr.PatternReplaceCharFilterFactory, quindi non sono sicuro se funziona. Se avete bisogno di costruire il proprio filtro di questa guida può essere utile:

http: //robotlibrarian.billdueber. com / edificio-a-solr-text-filtro-for-normalizzante-dati /

// John

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top