Beispiel #1
0
        public void Check_FacetSelection()
        {
            var facetsInput = new FacetListInput();

            facetsInput[GenreFacet] = new[] { "F" };

            CheckFacets(2, facetsInput);
        }
Beispiel #2
0
        public void Check_FacetNullSelection()
        {
            var facetsInput = new FacetListInput();

            facetsInput[GenreFacet] = new[] { FacetConst.NullValue };

            CheckFacets(1, facetsInput);
        }
Beispiel #3
0
        public void Check_PortfolioFacetSelectionNonPortfolioNull()
        {
            var facetsInput = new FacetListInput();

            facetsInput[DepartementFacet] = new[] { "0" };

            CheckWithNoPortfolio(facetsInput, string.Empty);
        }
Beispiel #4
0
        public void Check_FacetNullSelection()
        {
            var facetsInput = new FacetListInput();

            facetsInput[GenreFacet] = FacetConst.NullValue;

            var output = CheckFacets(facetsInput);

            /* Total. */
            Assert.AreEqual(1, output.List.Count, "Nombre de résultats attendu incorrect.");
            Assert.AreEqual(1, output.TotalCount, "Nombre total de résultats attendu incorrect.");
        }
Beispiel #5
0
        public void Check_PortfolioFacetSelectionNon()
        {
            var facetsInput = new FacetListInput();

            facetsInput[DepartementFacet] = new[] { "0" };

            var output = CheckFacets(facetsInput, portfolio: "02 03");

            /* Total. */
            Assert.AreEqual(4, output.List.Count, "Nombre de résultats attendu incorrect.");
            Assert.AreEqual(4, output.TotalCount, "Nombre total de résultats attendu incorrect.");
        }
Beispiel #6
0
        public void Check_InitialQueryFacet()
        {
            var facetsInput = new FacetListInput();

            var output = CheckFacets(facetsInput);

            Assert.IsNotNull(output);

            /* Total. */
            Assert.AreEqual(6, output.List.Count, "Nombre de résultats attendu incorrect.");
            Assert.AreEqual(6, output.TotalCount, "Nombre de résultats attendu incorrect.");

            /* Facettes */
            var facetsOutput = output.Facets;

            Assert.IsNotNull(facetsOutput, "Facettes non null attendues.");
            Assert.AreEqual(1, facetsOutput.Count, "Nombre de facettes attendu incorrect.");

            var facet       = facetsOutput.FirstOrDefault(d => d.Key == GenreFacet);
            var facetOutput = facet.Value;

            Assert.IsNotNull(facet.Key, "Facette genre manquante.");

            Assert.IsNotNull(facetOutput, "Valeur de facette attendue.");
            Assert.AreEqual(3, facetOutput.Count, "Nombre de genre.");
            foreach (var value in facetOutput)
            {
                var s = value.Code;
                var v = value.Count;
                switch (s)
                {
                case "M":
                    Assert.AreEqual(3, v);
                    break;

                case "F":
                    Assert.AreEqual(2, v);
                    break;

                case FacetConst.NullValue:
                    Assert.AreEqual(1, v);
                    break;

                default:
                    Assert.Fail("Clée inattendue : " + v);
                    break;
                }
            }
        }
Beispiel #7
0
        public void Check_PortfolioInitialQueryFacet()
        {
            var facetsInput = new FacetListInput();

            var output = CheckFacets(facetsInput, portfolio: "02 03");

            Assert.IsNotNull(output);

            /* Total. */
            Assert.AreEqual(6, output.List.Count, "Nombre de résultats attendu incorrect.");
            Assert.AreEqual(6, output.TotalCount, "Nombre de résultats attendu incorrect.");

            /* Facettes */
            var facetsOutput = output.Facets;

            Assert.IsNotNull(facetsOutput, "Facettes non null attendues.");
            Assert.AreEqual(1, facetsOutput.Count, "Nombre de facettes attendu incorrect.");

            var facet       = facetsOutput.FirstOrDefault(d => d.Code == DepartementFacet);
            var facetOutput = facet.Values;

            Assert.IsNotNull(facet.Code, "Facette portfolio manquante.");

            Assert.IsNotNull(facetOutput, "Valeur de facette attendue.");
            Assert.AreEqual(2, facetOutput.Count, "Nombre de valeurs de facettes.");
            foreach (var value in facetOutput)
            {
                var s = value.Code;
                var v = value.Count;
                switch (s)
                {
                case "0":
                    Assert.AreEqual(4, v);
                    break;

                case "1":
                    Assert.AreEqual(2, v);
                    break;

                default:
                    Assert.Fail("Clée inattendue : " + v);
                    break;
                }
            }
        }
Beispiel #8
0
        private static QueryOutput <PersonneDocument> CheckFacets(FacetListInput facetsInput, string query = null)
        {
            var facetQueryDefinition = new FacetQueryDefinition(new BooleanFacet {
                Name      = GenreFacet,
                FieldName = GenreField
            });
            var input = new AdvancedQueryInput {
                ApiInput = new QueryInput {
                    Criteria = new Criteria {
                        Query = query
                    },
                    Skip   = 0,
                    Top    = 10,
                    Facets = facetsInput,
                },
                FacetQueryDefinition = facetQueryDefinition
            };
            var broker = SearchBrokerManager.GetBroker <PersonneDocument>();

            return(broker.AdvancedQuery(input));
        }
Beispiel #9
0
        private static void CheckFacets(long expected, FacetListInput facetsInput, string query = null)
        {
            var facetQueryDefinition = new FacetQueryDefinition(new BooleanFacet {
                Code      = GenreFacet,
                FieldName = GenreField
            });
            var input = new AdvancedQueryInput {
                ApiInput = new QueryInput {
                    Criteria = new Criteria {
                        Query = query
                    },
                    Skip   = 0,
                    Top    = 10,
                    Facets = facetsInput,
                },
                FacetQueryDefinition = facetQueryDefinition
            };
            var broker = SearchBrokerManager.GetBroker <PersonneDocument>();
            var actual = broker.AdvancedCount(input);

            Assert.AreEqual(expected, actual, "Le compte n'est pas bon.");
        }
Beispiel #10
0
        private static QueryOutput <PersonneDocument> CheckFacets(FacetListInput facetsInput, string query = null, string security = null, string portfolio = null)
        {
            var facetQueryDefinition = new FacetQueryDefinition(new PortfolioFacet {
                Code      = DepartementFacet,
                FieldName = DepartementField
            });
            var input = new AdvancedQueryInput {
                ApiInput = new QueryInput {
                    Criteria = new Criteria {
                        Query = query
                    },
                    Skip   = 0,
                    Top    = 10,
                    Facets = facetsInput,
                },
                FacetQueryDefinition = facetQueryDefinition,
                Security             = security,
                Portfolio            = portfolio
            };
            var broker = SearchBrokerManager.GetBroker <PersonneDocument>();

            return(broker.AdvancedQuery(input));
        }
Beispiel #11
0
        private static void CheckWithNoPortfolio(FacetListInput facetsInput, string portfolio)
        {
            var output = CheckFacets(facetsInput, portfolio: portfolio);

            /* Total. */
            Assert.AreEqual(6, output.List.Count, "Nombre de résultats attendu incorrect.");
            Assert.AreEqual(6, output.TotalCount, "Nombre total de résultats attendu incorrect.");

            /* Facettes */
            var facetsOutput = output.Facets;

            Assert.IsNotNull(facetsOutput, "Facettes non null attendues.");
            Assert.AreEqual(1, facetsOutput.Count, "Nombre de facettes attendu incorrect.");

            var facet       = facetsOutput.FirstOrDefault(d => d.Code == DepartementFacet);
            var facetOutput = facet.Values;

            Assert.IsNotNull(facet.Code, "Facette portfolio manquante.");

            Assert.IsNotNull(facetOutput, "Valeur de facette attendue.");
            Assert.AreEqual(1, facetOutput.Count, "Nombre de valeurs de facettes.");
            foreach (var value in facetOutput)
            {
                var s = value.Code;
                var v = value.Count;
                switch (s)
                {
                case "0":
                    Assert.AreEqual(6, v);
                    break;

                default:
                    Assert.Fail("Clée inattendue : " + v);
                    break;
                }
            }
        }
Beispiel #12
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))));
            });
        }
Beispiel #13
0
        public void Check_FacetNoEmptyValueFacet()
        {
            var facetsInput = new FacetListInput();

            CheckFacets(1, facetsInput, "MARCHAND");
        }
Beispiel #14
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)))));
        }
Beispiel #15
0
        public void Check_InitialQueryFacet()
        {
            var facetsInput = new FacetListInput();

            CheckFacets(6, facetsInput);
        }
Beispiel #16
0
        /// <summary>
        /// Crée le filtre pour une facette sur les autres facettes multi-sélectionnables.
        /// </summary>
        /// <param name="builder">Query builder.</param>
        /// <param name="facet">Facette.</param>
        /// <param name="facetList">Liste des facettes.</param>
        /// <param name="selectedFacets">Facettes sélectionnées.</param>
        /// <param name="facetQueryBuilder">Builder de requête pour une facette.</param>
        /// <returns>La filtre.</returns>
        public static string BuildMultiSelectableFacetFilter(ElasticQueryBuilder builder, IFacetDefinition facet, ICollection <IFacetDefinition> facetList, FacetListInput selectedFacets, Func <string, IFacetDefinition, string, string> facetQueryBuilder)
        {
            return(builder.BuildAndQuery(selectedFacets?
                                         .Select(sf => {
                /* On ne filtre pas sur la facette en cours. */
                if (sf.Key == facet.Code)
                {
                    return null;
                }

                var targetFacet = facetList.Single(f => f.Code == sf.Key);

                /* On n'ajoute que les facettes multi-sélectionnables */
                if (targetFacet.IsMultiSelectable == false)
                {
                    return null;
                }

                return builder.BuildOrQuery(sf.Value
                                            .Select(v => facetQueryBuilder(v, targetFacet, null))
                                            .ToArray());
            })
                                         .Where(sf => sf != null)
                                         .ToArray()));
        }
Beispiel #17
0
        public void Check_PortfolioFacetPortfolioEmpty()
        {
            var facetsInput = new FacetListInput();

            CheckWithNoPortfolio(facetsInput, string.Empty);
        }
Beispiel #18
0
        public void Check_PortfolioFacetPortfolioNull()
        {
            var facetsInput = new FacetListInput();

            CheckWithNoPortfolio(facetsInput, null);
        }