web-dev-qa-db-fra.com

Je n'ai aucun champ disponible pour le tri avec le module de tri de l'API de recherche

Cette question est similaire à une autre que j'avais, mais maintenant dans un contexte différent. Ma question précédente était: zone de texte de recherche pour API de recherche + base de données + vues de recherche + API de facettes + bonus de facettes

Cette option a fonctionné, sauf que je ne peux pas utiliser la recherche actuelle pour réinitialiser la zone de recherche. Je peux réinitialiser les filtres, mais pas le champ de recherche. Je ne trouve pas non plus d'option permettant à l'utilisateur de trier les champs. J'ai installé le module de tri de l'API de recherche, mais je n'ai pas pu obtenir de champs disponibles. J'ai continué à arroser mon index en essayant d'activer/désactiver les champs, et je n'ai pas pu le comprendre.

Ma question est de savoir comment puis-je utiliser une zone de formulaire de recherche avec l'API de recherche + Vues qui me permettra de réinitialiser la zone de recherche avec la zone de recherche actuelle et comment puis-je avoir une zone de tri qui permettra au visiteur de sélectionner le champ de tri?

Ma vue rend les nœuds via les modes d'affichage de la suite d'affichage. En ce moment, j'utilise des filtres de recherche et de tri exposés, mais bien sûr, ils sont regroupés en un seul bloc. L'intérêt de devoir utiliser l'API de recherche était de fournir des filtres et de dissocier mes filtres de recherche et de tri les uns des autres. Mon option de tri sera placée en haut à droite de l'interface utilisateur et le tri dans la barre latérale gauche.

EDIT: À l'aide des tris de l'API de recherche , selon les conseils de giga ci-dessous, je suis retourné et j'ai essayé de trier mes champs. J'ai dépouillé les champs et toujours pas de chance pour les trier. C'est un site Commerce, et j'utilise l'API Commerce Search, qui me donne un index d'affichage des produits. À l'origine, je déplace des champs de contenu hors de l'index, il ne me reste donc que l'affichage de mon produit et les champs de produit.

Mes champs indexés en ce moment sont (champ, type, boost):

Type de contenu - Chaîne - 1.0
Titre - Chaîne - 1.0
Date de création - Date - 1.0
Date modifiée - Date - 1.0
Étiquettes de produit - Terme de taxonomie
Réf produit - Produit commercial
Type d'élément - Terme de taxonomie
Tri pondéral - Entier - 1,0
Réf du produit >> Prix >> Montant (décimal) (Min) - Décimal - 1,0
Réf du produit >> Prix >> Montant (décimal) (Max) - Décimal - 1,0
Titre (Texte intégral) [search_api_aggregation_1] - Texte intégral - 1.0
Tags de produit (Fulltext) [search_api_aggregation_4] - Fulltext - 1.0
Nom du type d'élément (Fulltext) [search_api_aggregation_5] - Fulltext - 1.0
Tags du produit >> Nom - Chaîne - 1.0
Réf Proudct >> Taille de portion - Chaîne - 1.0
Réf du produit >> Taille de la portion - Texte intégral - 1.0
Type d'élément >> Nom - Chaîne - 1.0
Réf du produit >> Prix >> Montant (décimal) - Décimal - 1,0

Les seuls champs que j'essaie d'indexer sont le titre, le prix min et max et le tri pondéral comme tri par défaut initial. Aucun d'eux n'apparaît dans ma table de champs triables sous l'onglet Tris.

4
vintorg

Il s'agit d'un problème connu dans la dernière mise à jour du module Trier. Commenter le bloc de code publié ici résout mon problème.

Pour résoudre le problème, utilisez la dernière version de développement.

https://drupal.org/node/220209

3
vintorg

L'API de recherche trie uniquement les champs des types pris en charge. Assurez-vous que les champs sur lesquels vous souhaitez trier sont des chaînes de valeurs uniques ou des nombres.

Si les champs sont mutli-valeur, vous pouvez utiliser les plages de l'API de recherche pour vous donner des champs de valeur max/min que vous pouvez utiliser.

Si un champ est en texte intégral, une astuce consiste à créer un champ agrégé contenant uniquement ce champ et à lui affecter un type de chaîne.

12
gigabates

travaillé cela ... avec l'aide de la réponse 3,

Commerce kickstart, API de recherche,

Champ d'agrégation ajouté ici: admin/config/search/search_api/index/product_display/workflow

sous l'onglet "filtres" puis recherchez "Paramètres de rappel" Cliquez sur "Champs agrégés" pour le transformer en l'onglet actif

J'ai ajouté un champ de poids de taxonomie et je l'ai nommé quelque chose comme "Poids de taxonomie d'agrégation". J'ai sélectionné "texte intégral" comme format.

Puis enregistrez et réindexez

Puis dans la section "champs" de admin/config/search/search_api/index/product_display/workflow

Mon nouveau champ se présentait pour l'indexation .... ;-)

Cochez le nouveau champ à indexer ... assurez-vous qu'il s'agit bien d'une "chaîne"

Enregistrer et réindexer

Allez voir ...

Ajoutez un nouveau FILTRE CONTEXTUEL .... recherchez votre nouveau champ "Pondération de la taxonomie d'agrégation"

Goto SORT CRITERIA dans votre vue .... votre nouveau champ est disponible pour trier ....

Cela m'a pris trois jours pour le résoudre LOL!

Il fallait donc partager ... Bonne chance!

4
Alex Overton

Eh bien, je vais essayer d'expliquer mon approche.

Je n'ai pas utilisé le module Sorts. Les étapes que j'ai prises sont les suivantes:

  1. J'ai créé un champ personnalisé avec ce hook: hook_entity_property_info_alter () dans un module séparé.
  2. Dans mon rappel getter, j'ai trouvé le poids du terme que je voulais et l'ai renvoyé comme INTEGER comme: return intval ($ weight);
  3. J'ai coché le champ nouvellement créé pour l'indexer et choisi Integer comme format. Ré-indexé l'index.
  4. Enfin, selon moi, dans les critères de tri, j'ai choisi Tri ascendant et le tour est joué !!
0
geodoo

Pour les champs à valeurs multiples, vous avez besoin de la dénormalisation fournie par ce module https://www.drupal.org/project/search_api_grouping

0
giorgio79