ToTitleCase em Solr para parar de gritar CAPS em Solr
-
19-09-2019 - |
Pergunta
Eu estou usando faceting do Solr e eu correr em um problema que eu estava esperando que eu poderia começar em torno de usar filtros.
Basicamente algumas vezes um nome de cidade virá através de SOLR como
"CAMBRIDGE"
e, por vezes é isso virá através como
"Cambridge"
Eu queria usar um filtro no Solr para parar a versão GRITANDO CAPS do nome da cidade. Parece que há um fitler para fazer todo o texto minúsculas .
<!-- 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>
Eu queria saber se alguém sabia de um filtro que irá ignorar o primeiro caractere de uma palavra e aplicar minúsculas para o resto dos personagens. Por exemplo.
- CAMBRIDGE >> Cambridge
- Kingston upon Hull >> Kingston Upon Hull
etc
Como alternativa, se é fácil escrever seus próprios filtros .. alguma ajuda sobre como fazer isso seria apreciada .. Eu não sou uma pessoa Java ..
Graças
Solução
AFAIK não há nenhum filtro embutido assim. Se você quiser escrever isto, veja LowerCaseFilterFactory e LowerCaseFilter para referência, não parece ser muito difícil.
Ou você poderia fazer isso do lado do cliente, ou seja, em SolrNet você poderia escrever um decorador ISolrOperations que faz as transformações necessárias após a consulta real, usando ToTitleCase .
Outras dicas
Talvez você poderia fazer uso do 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>
Observe, eu não testei o código ou solr.PatternReplaceCharFilterFactory, então eu não tenho certeza se ele funciona. Se você precisa construir o seu próprio filtro este guia pode ser útil:
http: //robotlibrarian.billdueber. com / construindo-a-Solr-text-filtro-for-normalizando-data /
// John