コード例 #1
0
        /// <summary>
        /// Running query
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnQryComb1_Click(object sender, EventArgs e)
        {
            try
            {
                DTO.CombinedFilter filter = new DTO.CombinedFilter();
                //TODO: Validation
                filter.HasChildren = bool.Parse(cboQryMustHasChildren.Text);
                filter.Ages        = txtQryShouldHaveAges.Text.Split(',').ToList <string>();
                filter.Names       = txtQryMustNotName.Text.Split(',').ToList <string>();

                FillListView(_customerBll.QueryUsingCombinations(filter), lvwHits2);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }
コード例 #2
0
        /// <summary>
        /// Querying combining fields
        /// </summary>
        /// <param name="customer"></param>
        /// <returns></returns>
        public List <DTO.Customer> QueryUsingCombinations(DTO.CombinedFilter filter)
        {
            //Build Elastic "Should" filtering object for "Ages":
            FilterContainer[] agesFiltering = new FilterContainer[filter.Ages.Count];
            for (int i = 0; i < filter.Ages.Count; i++)
            {
                FilterDescriptor <DTO.Customer> clause = new FilterDescriptor <DTO.Customer>();
                agesFiltering[i] = clause.Term("age", int.Parse(filter.Ages[i]));
            }

            //Build Elastic "Must Not" filtering object for "Names":
            FilterContainer[] nameFiltering = new FilterContainer[filter.Names.Count];
            for (int i = 0; i < filter.Names.Count; i++)
            {
                FilterDescriptor <DTO.Customer> clause = new FilterDescriptor <DTO.Customer>();
                nameFiltering[i] = clause.Term("name", filter.Names[i]);
            }

            //Run the combined query:
            var hits = _EsClientDAL.Current.Search <DTO.Customer>(s => s
                                                                  .Query(q => q
                                                                         .Filtered(fq => fq
                                                                                   .Query(qq => qq.MatchAll())
                                                                                   .Filter(ff => ff
                                                                                           .Bool(b => b
                                                                                                 .Must(m1 => m1.Term("hasChildren", filter.HasChildren))
                                                                                                 .MustNot(nameFiltering)
                                                                                                 .Should(agesFiltering)
                                                                                                 )
                                                                                           )
                                                                                   )
                                                                         )
                                                                  ).Hits;

            //Translate the hits and return the list
            List <DTO.Customer> typedList = hits.Select(hit => ConvertHitToCustumer(hit)).ToList();

            return(typedList);
        }