Bonjour,
Voici: j'ai un site php qui utilise une instance solr (elle tourne tout va bien ^^) . Nous indexons certaines données bibliographiques, dont des fichiers xml avec quelques métadonnées en sus. Exemple: nom du transcripteur = transcripteur (nom de l'index).
transcripteur est un index multivalué, déclaré:
<field name="transcripteur" type="string" indexed="true" stored="true" multiValued="true"/>
Or certaines transcriptions ont plusieurs transcripteurs (1 à 0,n); et c'est là le drame : dans mes facettes il semble que seul soit compté la première valeur et pas les autres.
Donc, pour exemple:
soit 1 transcription, g226_1f_091 (son nom), a deux transcripteurs (les deux valeurs sont indexées): "SDC" et "NS".
Si je fais une recherche retournant tous les documents "*": j'ai bien ma transcription et dans les facettes à la valeur "transcripteur" j'ai :
Il devrait me la compter deux fois.
Je peux obtenir toutes les transcriptions faites par "NS" en tapant dans la zone de recherche: ; ainsi, je retrouve ma transcription aussi.
Pour les questions de code:
j'indexe ainsi:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
$client = new SolrClient($options);
$doc = new SolrInputDocument();
$t = new transcription();
$t->get_folio_transcription($f->getId());
$data_arr = $t->get_transcription_transcripteurs();// retourne les bons résultats
if (is_array($data_arr)) {
foreach($data_arr as $id_data => $data) {
$doc->addField('transcripteur', $data['fullname']);
}
}
try {
$updateResponse = $client->addDocument($doc);
} catch (Exception $e) {
$html->dbg($doc->toArray());
$html->erreur($e);
$html->body_close();
exit;
} |
et je recherche:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
$query->setFacet(true);
$query->setFacetMinCount(1);
$query->addFacetField('transcripteur');
$query->setFacetMethod('enum', 'transcripteur');
if ($ans->facet_counts->facet_fields['transcripteur'] !='') {
echo '<strong>';
echo gettext('Transcripteur');
echo '</strong>';
echo PHP_EOL . '<ul>';
foreach ($ans->facet_counts->facet_fields['transcripteur'] as $facet => $nbr_facet) {
$data = array( 'q'=> $query->getQuery() . ' AND transcripteur:"' . $facet . '"');//ORIGINAL
//$data = array( 'q'=> $query->getQuery() . ' AND transcripteur:"' . $facet . '"', 'fq' => $query->getFacetMethod('transcripteur') . ' AND transcripteur:"' . $facet . '"');
//$data = array( 'q'=> $query->getQuery(), 'fq' => $query->getFacetMethod('transcripteur'));
$url = http_build_query($data, '', '&');//&facet=true&facet.field=transcripteur
echo PHP_EOL . '<li>';
echo '<a href="' . $_SERVER['PHP_SELF'] . '?' . $url . '">' . $facet . '</a> (' . $nbr_facet .')';
echo '</li>';
}
echo '</ul>';
} |
Vous pouvez voir quelques essais glané en furetant à droite à gauche mais la solution n'a pas encore été levée
Tout aide sera la bienvenue, merci.
Partager