/// <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); } }
/// <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); }