Ajouter le contenu du document au contenu du message parent
Cet article est une extension de Ajouter des données supplémentaires aux entrées indexées
SearchWP a la capacité de transférer le poids de pertinence dans un certain nombre de directions. Une direction est particulièrement applicable aux médias en ce sens que vous pouvez faire transférer par SearchWP le poids des entrées de médias à leur publication respective « Téléversé sur ». Dans la base de données, cette relation est établie en utilisant la colonne post_parent.
Lorsque ce transfert de poids a été configuré dans les paramètres du moteur (et en prenant les PDF comme exemple) lors de la recherche de contenu qui apparaît dans un PDF, le résultat que SearchWP renvoie ne sera pas le PDF lui-même, mais plutôt l'article auquel il a été attaché.
Selon votre site et les circonstances, cela peut être très bénéfique !
Il existe cependant quelques cas limites, et parfois le transfert de poids n'est pas quelque chose que vous souhaitez voir se produire dans tous les cas. Nous pouvons tirer parti de l'adaptabilité de SearchWP et personnaliser notre implémentation pour plutôt :
- Désactiver complètement les médias du moteur SearchWP
- Accrocher l'indexeur de SearchWP et récupérer les PDF « enfants » des articles lors de leur indexation
Cette application dynamique nous permet de mieux évaluer la situation au cas par cas.
All hooks should be added to your custom SearchWP Customizations Plugin.
| <?php | |
| // @link https://searchwp.com/documentation/knowledge-base/append-document-content-to-parent-post-content/ | |
| // Retrieve child PDF content and add as 'extra' data to a SearchWP Entry. | |
| add_filter( 'searchwp\entry\data', function( $data, \SearchWP\Entry $entry ) { | |
| // Convert the SearchWP Entry into it's native object type. | |
| $entry = $entry->native(); | |
| // We only want to consider WP_Post objects. | |
| if ( ! $entry instanceof \WP_Post ) { | |
| return $data; | |
| } | |
| // Retrieve PDFs that have been uploaded to this Entry. | |
| $pdfs = get_posts( [ | |
| 'post_type' => 'attachment', | |
| 'post_mime_type' => 'application/pdf', | |
| 'post_status' => 'inherit', | |
| 'nopaging' => true, | |
| 'post_parent' => $entry->ID, | |
| ] ); | |
| if ( empty( $pdfs ) ) { | |
| return $data; | |
| } | |
| // Retrieve PDF content for PDFs and store as extra data. | |
| $data['meta'][ 'searchwp_child_pdf_content' ] = array_map( function( $pdf ) { | |
| return \SearchWP\Document::get_content( $pdf ); | |
| }, $pdfs ); | |
| return $data; | |
| }, 20, 2 ); | |
| // Add "Attached PDF Content" as available option to SearchWP Source Attributes. | |
| add_filter( 'searchwp\source\attribute\options', function( $keys, $args ) { | |
| if ( $args['attribute'] !== 'meta' ) { | |
| return $keys; | |
| } | |
| // This key is the same as the one used in the searchwp\entry\data hook above, they must be the same. | |
| $pdf_content_key = 'searchwp_child_pdf_content'; | |
| // Add "Attached PDF Content" Option if it does not exist already. | |
| if ( ! in_array( | |
| $pdf_content_key, | |
| array_map( function( $option ) { return $option->get_value(); }, $keys ) | |
| ) ) { | |
| $keys[] = new \SearchWP\Option( $pdf_content_key, 'Attached PDF Content' ); | |
| } | |
| return $keys; | |
| }, 20, 2 ); |
Ces hooks s'intègrent au processus d'indexation de SearchWP et, pour chaque article (par exemple, Articles, Pages, Types d'articles personnalisés), rechercheront les PDF qui ont été « téléversés sur » cet article actuel (en utilisant la relation établie post_parent), puis analyseront chacun de ces PDF pour en extraire le contenu.
Le contenu de tous les PDF « enfants » sera stocké sous forme de champ personnalisé supplémentaire avec le nom searchwp_child_pdf_content. Le deuxième hook ajoutera ce champ personnalisé supplémentaire à la liste déroulante des champs personnalisés lors de la gestion des attributs d'article dans votre moteur SearchWP, et l'entrée portera le nom de Contenu PDF joint, ce qui vous permettra d'attribuer un poids de pertinence individuel au contenu PDF extrait.
Remarque : Pour que ce changement prenne effet, vous devrez reconstruire votre index en utilisant le bouton de l'onglet Moteurs de l'écran des paramètres de SearchWP.

