Question

J'ai lu quelques tutoriels et naviguerez sur la documentation Solr. Mais une chose est pas clair pour moi. Permettez-moi de vous expliquer:

Le Asume Let que le document suivant est indexé:

<doc>
  <field name="id">R12345</field>
  <field name="title">My title</field>
  <field name="content">My Content</field>
</doc>

Contrairement à ce document, l'index doit contenir un champ supplémentaire appelé « docType ». Ce champ d'index supplémentaire doit être rempli à l'aide d'une « règle d'achèvement ». L'idée derrière ceci:

Si commence id de caractère « R », puis écrire la chaîne « Resolve » dans docType de champ dans l'index. Si commence id avec caractère « C », puis écrire la chaîne « Contribuer » dans docType de champ dans l'index.

Le document ci-dessus devrait être disponible dans l'index avec les champs suivants:

id=R12345
title=My Title
content=My Content
docType=Resolve

Mon idée est d'utiliser un analyseur pour cela. Le résultat de l'analyseur sera alors écrit dans le champ « id » dans l'index comme d'habitude (seulement une copie du texte original), mais le résultat « Resolve » ou « Contribuer » devrait être écrit dans un autre domaine.

Ma question fondamentale est: Comment cela peut-il être réalisé dans Teh Analyzer (Java ciselée)? Pour le rendre plus complexe le champ d'index « docType » devrait être consultable et doit être disponible dans le résultat de recherche. Comment le regard du schéma comme pour champ id et docType?

Merci d'avance Tobias

Était-ce utile?

La solution

Si vous avez seulement besoin de la valeur indexée, l'approche de schéma est suffisante. Créer une nouvelle FieldType qui exécute le traitement nécessaire, créer un champ de votre nouveau type, et mettre en place un champ de copie pour copier la valeur de id:

<fieldType name="doctypeField" class="solr.TextField">
  <analyzer type="index">
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.PatternReplaceFilterFactory" pattern="([CR]).*" replacement="$1" replace="all" />
    <filter class="solr.PatternReplaceFilterFactory" pattern="C" replacement="Contribute" replace="all" />
    <filter class="solr.PatternReplaceFilterFactory" pattern="R" replacement="Resolve" replace="all" />
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

<field name="doctype" type="doctypeField" indexed="true" stored="false" required="false" />

<copyField source="id" dest="doctype"/>

Vous voudrez peut-être noter que vous ne recevrez pas une valeur stockée de cette situation. Si vous avez besoin, alors vous devriez avoir la valeur DOCTYPE compris avant d'alimenter le document Solr -. Par exemple en créant dans la requête SQL, si votre source de contenu est SQL, etc

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top