2017-10-16 10 views
0

Voici ma requête. J'essaie d'obtenir tous les produits qui se trouvent dans la catégorie "men_fashion" et "men_shoes" (les catégories sont utilisées comme termes/tags). Ensuite, je veux interroger l'ensemble des résultats et de rechercher des produits qui ont "hommes bottes jaune" en eux.L'agrégation Elasticsearch n'est pas appliquée aux filtres

La requête ci-dessous fonctionne parfaitement, mais je n'obtiens pas les bons résultats d'agrégation. Cela me donne toutes les marques où je suis seulement intéressé par les marques.

{ 
    "size": 15, 
    "from": 0, 
    "query": { 
     "query_string": { 
      "query": "men boots yellow" 
     } 
    }, 
    "filter": { 
     "bool": { 
      "must": [{ 
       "match": { 
        "active": 1 
       } 
      }, { 
       "match": { 
        "category": "men_fashion" 
       } 
      }, { 
       "match": { 
        "category": "men_shoes" 
       } 
      }] 
     } 
    }, 
    "aggs": { 
     "brands": { 
      "terms": { 
       "size": 100, 
       "field": "brand" 
      } 
     } 
    } 
} 

Je pense que cela pourrait être dû au filtre que j'ai appliqué, mais si cela est en quelque sorte compliqué je suis ok avec l'aide d'une simple requête qui y parviennent sans les filtres.

Répondre

1

Vous utilisez un post filter au lieu d'un filtre de requête normale, essayer comme ceci:

{ 
    "size": 15, 
    "from": 0, 
    "query": { 
    "bool": { 
     "must": { 
     "query_string": { 
      "query": "men boots yellow" 
     } 
     }, 
     "filter": [ 
     { 
      "match": { 
      "active": 1 
      } 
     }, 
     { 
      "match": { 
      "category": "men_fashion" 
      } 
     }, 
     { 
      "match": { 
      "category": "men_shoes" 
      } 
     } 
     ] 
    } 
    }, 
    "aggs": { 
    "brands": { 
     "terms": { 
     "size": 100, 
     "field": "brand" 
     } 
    } 
    } 
} 
+0

Je pense que u le paramètre manqué requête. Mais c'est parfait. Merci Val. J'ai une autre question liée à elasticsearch qui m'embête depuis un mois. Vous pouvez trouver ma question ici https://stackoverflow.com/questions/46463938/how-to-get-all-agrgregations-by-avoiding-1-filter-from-the-elasticsearch-query. Fondamentalement, il s'agit d'une sélection multiple d'agrégations. quand je clique sur un filtre, par exemple la couleur: doré. Il supprime toutes les autres agrégations et me montre juste cette couleur dorée. Mais les sites comme Amazon ont plusieurs couleurs à sélectionner. Y at-il quelque chose de simple que l'agrégation filtrée –

+0

Woopsie, mon mauvais, fixe, merci! – Val

+0

Après quelques tests j'ai réalisé qu'il y a quelque chose qui ne va pas avec la requête. Je ne suis pas capable de rechercher la plupart des phrases. Comment puis-je modifier cela afin que tout ce qui est un peu pertinent devrait être montré –