11
votes

Comment filtrer la recherche par des valeurs non disponibles

J'ai une liste d'éléments comme: xxx

maintenant, chaque élément de i a un attribut, prix

Je veux réduire le résultat dans lequel les informations de prix sont non disponibles avec celles qui tombent dans une plage donnée

quelque chose comme xxx

Comment cela peut-il être fait?


2 commentaires

Je me demande si Cette syntaxe pourrait fonctionner?


@ Martijnpieters que la syntaxe a fonctionné séparément, mais pas avec ou. J'ai mis à jour ma question


5 Réponses :


6
votes

Selon le SOLRQUERYSYNTAX

Quères négatives pures:

-Field: [* à *] trouve tous les documents sans valeur pour le champ

Vous pouvez essayer:

q = (*: * -Price: [* à *]) ou Price: [300 à 400]


8 commentaires

Il ne me donne toujours pas d'articles avec des prix compris entre 300 et 400


Quel est le type de prix de terrain? Sint ?? ou chaîne / texte?


Le champ de prix est décimal (flotteur)


Comment votre requête regarde-t-elle maintenant? Pouvez-vous mettre à jour votre question?


je ne comprends pas. Je veux que le prix tombe dans une plage particulière et ceux sans valeurs. Je ne connais pas la requête pour ça


Mettez à jour la réponse avec la requête. Ceci est testé et fonctionne bien.


Pouvez-vous s'il vous plaît me donner comment écrire à l'intérieur Narrow


Pas sûr de ça. Vous pouvez coller comme dans l'étroit sans q = partie.



-1
votes

On peut utiliser une requête de filtre code> si vous ne vous souciez pas du score de document et souhaitez tirer parti du cache du filtre, comme:

?q=*:*&fq=((-price:[* TO *]) or (price:[300 TO 400]))


2 commentaires

Cojocaru, pouvez-vous donner la requête dans modèles (élément) .Filter .. Formulaire. Je suis vraiment nouveau à Solr et je ne suis pas capable de convertir votre code en ce formulaire


Essayez quelque chose comme ces modèles (article) .Filter_or (Prix = Aucune, Prix__Range = [300, 400]) Basé sur github.com/soby/django-haystack/commit/... Pour des valeurs vides Il faut utiliser aucun



12
votes

Essayez ceci:

-(-price:[300 TO 400] AND price:[* TO *])


2 commentaires

pourquoi ~ et` pas ou s'il fonctionne pour les deux et et ou , je me demande pourquoi


Je ne pense pas que cela fonctionne avec ou. Regardez ce lien: Whatis.TechTarget.com/Definition/... . Si vous oubliez une seconde la négative à l'intérieur des parentesys ce que nous faisons actuellement ici dans une NAND entre 2 termes et que cela peut être assez similaire à un ou non dans tous les cas, faites attention.



0
votes

L'objectif était de trier certains éléments par marquage en fonction d'un boostting par type et plus si un type de vélo a une image. Le résultat devrait être:

  1. voitures
  2. Bateaux
  3. Vélos avec une image
  4. Vélos sans image

    C'était ma première approche de requête: Type: "voiture" ^ 10000 ou type: "Bateau" ^ 5000 ou (type: "Vélo" et type d'image: [* à *]) ^ 100 ou type: "Vélo" ^ 5 (fonctionne bien)

    Mais j'ai oublié d'anciens articles de données sans le champ de type. Le devrait être dans le résultat défini comme celui-ci:

    1. voitures
    2. Bateaux
    3. Vélos avec une image
    4. Vélos sans image
    5. Tous les articles sans type

      Alors j'ai changé ma requête en -Type: [* à *] ou Type: "voiture" ^ 10000 ou type: "Bateau" ^ 5000 ou (type: "Vélo" et type d'image: [* À *]) ^ 100 ou type: "vélo" ^ 5 et fini sans résultat.

      Alors j'ai trouvé ce fil et essayé de changer ma requête en - (type: [* à *] ou -Type: "voiture" ^ 10000 ou -Type: "Bateau" ^ 5000 ou - (Type: "Vélo" et type d'image: [* à *]) ^ 100 ou -TYPE: "Vélo" ^ 5 ) Comme indiqué dans cette réponse https://stackoverflow.com/a/17211744/326905

      Mais malheureusement, tous les articles ont le même score: (


0 commentaires

0
votes

La requête double négative suggérée par Maurizio peut provoquer une erreur: xxx

(même après la réindexation. Cela peut avoir quelque chose à voir avec l'index Store et docvalues ​​ Paramètres du champ.)

Ce que vous pourriez faire à la place est exempté les deux gammes (avant et après) des valeurs que vous êtes réellement intéressé Dans: xxx

Notez que les valeurs 300 et 400 sont exclues à l'aide des supports bouclés dans cette requête annulée et sont donc incluses dans les résultats de la recherche.


0 commentaires