Comment créer un casse copie d'un champ de type chaîne dans SOLR?
Comment puis-je créer une copie d'une chaîne de caractères en cas insensible forme? Je veux utiliser le type "chaîne de caractères" type et un casse type. Les types sont définis comme suit:
<fieldType name="string" class="solr.StrField"
sortMissingLast="true" omitNorms="true" />
<!-- A Case insensitive version of string type -->
<fieldType name="string_ci" class="solr.StrField"
sortMissingLast="true" omitNorms="true">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
</fieldType>
Et un exemple de champ comme suit:
<field name="destANYStr" type="string" indexed="true" stored="true"
multiValued="true" />
<!-- Case insensitive version -->
<field name="destANYStrCI" type="string_ci" indexed="true" stored="false"
multiValued="true" />
J'ai essayé d'utiliser CopyField comme suit:
<copyField source="destANYStr" dest="destANYStrCI" />
Mais, apparemment CopyField est appelée sur la source et la destination avant tout des analyseurs sont invoquées, de sorte que même si j'ai précisé que dest est pas sensible à la casse grâce à anaylyzers le cas des valeurs copiées à partir de la source de champ sont conservés.
Je suis l'espoir d'éviter de re-transmission de la valeur dans le champ de la part du client, à un moment de la création.
Vous devez vous connecter pour publier un commentaire.
Avec pas de réponses de la SORTE, j'ai suivi sur le SOLR la liste des utilisateurs. J'ai trouvé que ma string_ci domaine ne fonctionne pas comme prévu, avant même de penser les effets de copyField. Ahmet Arslan explique pourquoi le "string_ci" champ doit être à l'aide de solr.TextField et pas solr.StrField:
Avec un exemple il provdied et une légère tweak par moi-même, le champ suivant la définition semble faire l'affaire, et maintenant le CopyField fonctionne comme prévu ainsi.
La destANYStrCI domaine aura une affaire conservées valeur stockée, mais fournira une casse champ de la recherche. Mise en garde: insensible à la casse générique de la recherche ne peut être effectuée depuis la wild card de phrases de contournement de l'analyseur de requêtes et ne sera pas mis en minuscule avant d'appariement par rapport à l'index. Cela signifie que les caractères génériques phrases doivent être en minuscules afin de match.
Oui vrai. LowerCaseFilterFactory ne s'applique pas au type de données String. On ne peut s'appliquer qu'LowerCaseFilterFactory sur les champs de Texte.
Si vous essayez de faire de cette façon
Cela ne fonctionne pas, Nous devons utiliser TextField.
Essayer de cette façon, il devrait fonctionner. Il suffit de changer le type de champs de
String
àTextField
HTML: