Пример #1
0
        /// <inheritdoc/>
        public void DefineAggregation(Nest.AggregationContainerDescriptor <TDocument> agg, IFacetDefinition facet, ICollection <IFacetDefinition> facetList, FacetListInput selectedFacets, string portfolio)
        {
            /* Récupère le nom du champ. */
            var fieldName = _document.Fields[facet.FieldName].FieldName;

            /* On construit la requête de filtrage sur les autres facettes multi-sélectionnables. */
            var filterQuery    = FacetingUtil.BuildMultiSelectableFacetFilter(_builder, facet, facetList, selectedFacets, CreateFacetSubQuery);
            var hasFilterQuery = !string.IsNullOrEmpty(filterQuery);

            agg.Filter(facet.Code, f => {
                if (hasFilterQuery)
                {
                    /* Crée le filtre sur les facettes multi-sélectionnables. */
                    f.Filter(q => q.QueryString(qs => qs.Query(filterQuery)));
                }

                return(f.Aggregations(aa => aa
                                      /* Créé une agrégation sur les valeurs discrètes du champ. */
                                      .Terms(facet.Code, st => st.Field(fieldName).Size(50))
                                      /* Créé une agrégation pour les valeurs non renseignées du champ. */
                                      .Missing(facet.Code + MissingFacetPrefix, ad => ad.Field(fieldName))));
            });
        }
Пример #2
0
        /// <inheritdoc/>
        public void DefineAggregation(Nest.AggregationContainerDescriptor <TDocument> agg, IFacetDefinition facet, ICollection <IFacetDefinition> facetList, FacetListInput selectedFacets, string portfolio)
        {
            if (string.IsNullOrEmpty(portfolio))
            {
                /* Portefeuille de l'utilisateur vide : on ne définit pas d'agregations. */
                return;
            }

            /* Récupère le nom du champ. */
            string fieldName = _document.Fields[facet.FieldName].FieldName;

            /* On construit la requête de filtrage sur les autres facettes multi-sélectionnables. */
            var filterQuery = FacetingUtil.BuildMultiSelectableFacetFilter(_builder, facet, facetList, selectedFacets, CreateFacetSubQuery);

            /* Créé une agrégation avec deux buckets. */
            var inQuery  = _builder.BuildAndQuery(_builder.BuildInclusiveInclude(fieldName, portfolio), filterQuery);
            var outQuery = _builder.BuildAndQuery(_builder.BuildExcludeQuery(fieldName, portfolio), filterQuery);

            agg.Filters(facet.Code, st => st.NamedFilters(x => x
                                                          /* Une pour les documents dans le portefeuille */
                                                          .Filter(InValue, d => d.QueryString(query => query.Query(inQuery)))
                                                          /* Une pour les documents absents du portefeuille */
                                                          .Filter(OutValue, d => d.QueryString(query => query.Query(outQuery)))));
        }