Solr: transformer un champ séparés par des virgules pendant l'importation des données
Je travaille avec Solr 3.5.0. Je suis l'importation à partir d'une source de données JDBC et ont délimité dans le domaine que je voudrais diviser en valeurs individuelles. Je suis à l'aide de la RegexTransformer
mais mon domaine n'est pas divisée.
valeur de l'échantillon
Bob,Carol,Ted,Alice
data-config.xml
<dataConfig>
<dataSource driver="..." />
<document>
<entity name="ent"
query="SELECT id,names FROM blah"
transformer="RegexTransformer">
<field column="id" />
<field column="names" splitBy="," />
</entity>
</document>
</dataConfig>
schema.xml
<schema name="mytest" version="1.0">
<types>
<fieldType name="string" class="solr.StrField" sortMissingLast="true"
omitNorms="true"/>
<fieldType name="integer" class="solr.IntField" omitNorms="true"/>
</types>
<fields>
<field name="id" type="integer" indexed="false" stored="true"
multiValued="false" required="true" />
<field name="name" type="string" indexed="true" stored="true"
multiValued="true" required="true" />
</fields>
</schema>
Quand je fais une recherche : - je obtenir un résultat doc
élément comme ceci:
<doc>
<int name="id">22</int>
<arr name="names">
<str>Bob,Carol,Ted,Alice</str>
</arr>
</doc>
J'espérais obtenir ceci à la place:
<doc>
<int name="id">22</int>
<arr name="names">
<str>Bob</str>
<str>Carol</str>
<str>Ted</str>
<str>Alice</str>
</arr>
</doc>
C'est tout à fait possible que j'ai mal compris le RegexTransformer
l'article de la wiki. J'ai essayé de changer mon délimiteur et j'ai essayé d'utiliser un autre champ pour les pièces (comme indiqué dans le wiki)...
<field column="name" splitBy="," sourceColName="names" />
...mais qui a entraîné un vide name
champ. Ce que je fais mal?
Mise à jour de votre domaine de définition est correcte. Les noms de champ doit correspondre à votre
Oui, j'ai même supprimé le répertoire d'index pour en être sûr. Le journal de toutes les instructions de la console et je n'ai rien vu.
stackoverflow.com/questions/9914483/... Cette réponse à partir d'un autre thread a fonctionné pour moi.
data-import.xml
et votre schema.xml
. Êtes-vous sûr de réindexée après le changement? Ne vous obtenez des messages d'erreur dans le solr journal?Oui, j'ai même supprimé le répertoire d'index pour en être sûr. Le journal de toutes les instructions de la console et je n'ai rien vu.
stackoverflow.com/questions/9914483/... Cette réponse à partir d'un autre thread a fonctionné pour moi.
OriginalL'auteur Paul | 2012-02-25
Vous devez vous connecter pour publier un commentaire.
J'ai manipulé un problème similaire, par la création d'un type de champs dans le fichier de schéma:
Puis j'ai appliqué ce type de champ pour le champ de données comme:
Les données seront toujours stockées en tant que délimitée par des virgules de la chaîne, mais vous devriez être capable de les interroger en tant que valeurs individuelles. Si votre nom de champ est "noms" avec les valeurs "bill, bob, ted", il va les stocker en tant que séparés par des virgules de la chaîne, mais les index en tant que valeurs individuelles. Vous pouvez ensuite requête comme les noms: "ted".
Quelle est la différence avec le paramètre type="text_ws"?
Cela dépendrait de ce que vous avez définie "text_ws". Si vous regardez mon exemple, j'ai défini un type de "délimité par des virgules" qui utilise les regex pour diviser le terrain. Voici les types inclus dans Solr: cwiki.apache.org/confluence/display/solr/.... "text_ws" n'est pas inclus dans le champ type.
OriginalL'auteur dhysong
Votre colonne de base de données est appelée
names
tandis que le Solr champ est appeléname
(Remarquez le manques
). Une solution est d'utiliser la ligne suivante dans votre DIH config et puis re-index.Avez enlevé la virgule - merci pour le tuyau.
splitBy="," j'obtiens l'erreur invalide le champ de la propriété
OriginalL'auteur nikhil500
Essayer de mettre le transformateur="RegexTransformer" avant l'instruction de la requête aussi vous avez une erreur
vous devez supprimer les " >'
OriginalL'auteur bikedorkseattle
Vous pouvez utiliser un transformateur="RegexTransformer" et également vous pouvez utiliser javascript pour la division de la valeur.
et ajouter le
transformer="script:stringtoarray"
à l'entité champOriginalL'auteur Lijo Abraham