0
votes

SOLR - forcer la facette pour montrer des champs d'énumération qui ne sont pas actuellement présents dans aucun document

J'ai un champ qui peut avoir connu des valeurs de chaîne, et il est de Enumfield Type.

Y a-t-il un moyen de forcer solr pour renvoyer toutes les valeurs de la facette pour cela? La propriété facet.mincount = 0 ne fonctionne que s'il existe des documents existants avec une valeur de champ de facette correspondante, mais elles ont été filtrées dans la recherche actuelle en utilisant par exemple. FQ.

Toutefois, si aucun document courant n'a cette valeur, il ne s'affiche pas du tout.


considère que j'ai un champ type , qui est défini comme une énumération et peut avoir des valeurs a et b . Et disons que j'ai importé de tels documents: xxx

si je fais une requête de facette sur le champ type à l'aide d'une requête de filtre par utilisateur "bar" , la seule valeur de facette que je suis renvoyée est "A" avec le nombre de 0. Mon objectif est de le forcer à renvoyer les deux valeurs "A" et "B" dans ce scénario (et à la fois compter 0).


7 commentaires

Voulez-vous voir des valeurs de facette même pour des documents qui ne sont pas assortis par la requête?


Oui, en particulier lorsque ces valeurs de facette sont définies comme étant ENUM


Pourriez-vous élaborer sur cela? Enum comme des valeurs prédéfinies? Comment Solr saurait-il de votre énumeur quelque part?


Je parle spécifiquement de l'énum de Solr, comme on le voit par exemple. Ici lucene.apache.org/solr/guide/6_6 /working-with-enum-fields.ht ml


Ouais, mais en ce sens, Enumfield n'est pas différent en termes de facettes que d'autres types de champs, les facettes sont calculées uniquement sur le doctset assorti uniquement. Je pouvais penser à une idée si vous avez une FQ qui pourrait être ignoré et que vous souhaitez retourner des résultats l'ignorant. Ça va ça va?


J'ai ajouté un exemple à ma question, j'espère que c'est plus clair maintenant.


Ma question est une facette est pour la sélection afin que l'utilisateur puisse réduire les résultats de la recherche. Il n'est pas utile de montrer une facette à l'utilisateur pour lequel les résultats n'existent déjà pas. Si vous n'avez vraiment besoin que de savoir quel champ Type Type a alors vous pouvez vérifier ma réponse si cela pourrait vous aider.


3 Réponses :


-1
votes

Vous pouvez y parvenir en utilisant Eclut et excluant les filtres :

Vous marquez d'abord votre requête de filtre: fq = {! Tag = my_tag} user_s: bar

Et puis vous utilisez l'étiquette exclude dans votre facette: facet.field = {! ex = my_tag} Type


1 commentaires

Cela n'affecterait que les valeurs des valeurs de facettes, mais cela n'inclurait pas les clés manquantes. Encore une fois, il n'y a pas de document unique avec la valeur de "B" pour le champ ; En d'autres termes, une requête type: B retournerait un ensemble vide. La réponse doit se résoudre autour de l'ENUM d'une manière ou d'une autre, comment Solr connaîtra-t-elle toutes les valeurs possibles?



1
votes

Selon la liste de diffusion, cela n'est pas possible pour le moment.


0 commentaires

0
votes

Si vous êtes simple sur le point de trouver tous les termes présents dans le type de champ, vous pouvez facilement le trouver à l'aide du composant à terme de la SOLR.

Doc: https://lucène.apache.org.org /Solr/guide/6_6/Le-Terms-Component.html

doc est pour la version 6.6 Vous pouvez le modifier en conséquence la version que vous travaillez actuellement.

Voici l'URL d'échantillon: http: // localhost: 8983 / SOLR / Collection / Termes? Termes.fl = type


1 commentaires

Mais ce n'est pas la question de la question - la question souhaite inclure toutes les valeurs possibles pour l'énumfield, même s'il n'y a pas de documents contenant cette valeur. Les termes composants ne renvoient pas ces valeurs à moins d'être présentes dans un document, ce qui est le même cas que l'OP a demandé à l'origine (et utilisé face à face).