public int GetCount(string keyword, string type) { int count = 0; string indexname = ConfigurationManager.AppSettings["IndexName"].ToString(); string typename = ConfigurationManager.AppSettings["TypeName"].ToString(); if (string.IsNullOrEmpty(type)) { type = "_all"; } QueryContainer matchQuery = new MatchQuery() { Field = type, Query = keyword, Operator = Operator.And }; QueryContainer querystring = new QueryStringQuery() { Query = keyword, DefaultOperator = Operator.And }; //调用仅取数量方法 var counts = Connect.GetSearchClient().Count <NewsBase>(s => s .Index(indexname) .Type(typename) .Query(matchQuery) ); count = (int)counts.Count; return(count); }
public async Task <TimedEntity <IEnumerable <Book> > > SearchBooks(string query) { var authorQuery = new MatchQuery() { Field = Infer.Field <Book>(f => f.Author), Query = query, }; var titleQuery = new MatchQuery() { Field = Infer.Field <Book>(f => f.Title), Query = query, }; Stopwatch st = new Stopwatch(); st.Start(); var response = await elasticClient.SearchAsync <Book>( x => x.Index(BookIndex) .From(0) .Size(50) .Query(q => q.Bool(b => b.Should(authorQuery, titleQuery))) ); st.Stop(); _logger.LogCritical("Elastic search call: " + st.ElapsedMilliseconds); return(new TimedEntity <IEnumerable <Book> > { Entity = response.Documents.ToArray(), MilliSeconds = st.ElapsedMilliseconds }); }
public IEnumerable<string> GetIDs(string keyword, string field, int start, int size) { string indexname = ConfigurationManager.AppSettings["CRMIndex"].ToString(); string typename = ConfigurationManager.AppSettings["CRMMemberType"].ToString(); //QueryContainer query = new QueryStringQuery() { Query = keyword, DefaultOperator = Operator.Or, DefaultField = type}; //QueryContainer termQuery = new TermQuery { Field = type, Value = keyword }; //QueryContainer prefixQuery = new PrefixQuery { Field = type, Value = keyword }; if (string.IsNullOrEmpty(field)) { field = "_all"; } else { field = field.ToLower(); } QueryContainer matchQuery = new MatchQuery() { Field = field, Query = keyword, Operator = Operator.And }; var searchResults = Connect.GetSearchClient().Search<Member>(s => s .Index(indexname) .Type(typename) .Query(matchQuery) .Fields(f=>f.Id) //.Sort(st => st.OnField(f => f.newsid).Order(SortOrder.Descending)) /*按ID排序,id为数字,排序正常*/ .From(start) .Size(size) ); //List<Member> eslist = new List<Member>(searchResults.Documents); List<string> eslist = new List<string>(); foreach (var hit in searchResults.Hits) { eslist.Add(hit.Id); } return eslist; //return eslist.Select(s=>s.Id); }
public int GetCount(string keyword, string field) { int count = 0; string indexname = ConfigurationManager.AppSettings["CRMIndex"].ToString(); string typename = ConfigurationManager.AppSettings["CRMMemberType"].ToString(); //QueryContainer query = new QueryStringQuery() { Query = keyword, DefaultOperator = Operator.Or, DefaultField = type }; //QueryContainer termQuery = new TermQuery { Field = type, Value = keyword }; //QueryContainer prefixQuery = new PrefixQuery { Field = type, Value = keyword }; if (string.IsNullOrEmpty(field)) { field = "_all"; } else { field = field.ToLower(); } QueryContainer matchQuery = new MatchQuery() { Field = field, Query = keyword, Operator = Operator.And }; //调用仅取数量方法 var counts = Connect.GetSearchClient().Count <Member>(s => s .Index(indexname) .Type(typename) .Query(matchQuery) ); count = (int)counts.Count; return(count); }
public void Execute(IESIndex <Employee> context) { var client = context.GetClient(); var query = new QueryContainer(); foreach (var skill in offer.RequaredSkills) { query &= new MatchQuery { Field = new Field("skills.id"), Query = skill.Id.ToString() }; } var searchResponse = client.Search <ESEmployee>(s => s .From(page) .Size(size) .Query(q => query) ); if (!searchResponse.IsValid) { this.AddErrors(new QueryExectutionFailedError(searchResponse.DebugInformation)); return; } var employees = new List <Employee>(); foreach (var doc in searchResponse.Documents) { employees.Add(doc); } SetValue(employees); }
public IEnumerable <TModel> GetEntities(TType[] ids, string indexName) { if (!ids.Any()) { return new List <TModel> { } } ; var value = new StringBuilder(); foreach (var id in ids) { value.Append(id); value.Append(" "); } var queryContainer = new MatchQuery { Field = "id", Query = value.ToString() }; var response = RetrieveQueryDocuments(queryContainer, indexName); if (!response.Any()) { throw new EntityNotFoundException($"Entities with ids: \"{ids}\" not found in index \"{indexName}\""); } return(response); }
public List<NewsBase> GetList(string keyword, string field, int start, int size) { string indexname = ConfigurationManager.AppSettings["IndexName"].ToString(); string typename = ConfigurationManager.AppSettings["TypeName"].ToString(); if (string.IsNullOrEmpty(field)) { field = "_all";} QueryContainer matchQuery = new MatchQuery() { Field = field, Query = keyword,Operator=Operator.And }; //QueryContainer querystring = new QueryStringQuery() { Query = keyword, DefaultOperator = Operator.And }; var searchResults = Connect.GetSearchClient().Search<NewsBase>(s => s .Index(indexname) .Type(typename) .Query(matchQuery) //.Fields("newsid") .Sort(st => st.OnField(f => f.Newsid).Order(SortOrder.Descending)) /*按ID排序,id为数字,排序正常*/ .From(start) .Size(size) //.Highlight(h => h // .OnFields(f => f // .OnField("*") // .PreTags("<b style='color:red'>") // .PostTags("</b>"))) ); List<NewsBase> eslist = new List<NewsBase>(searchResults.Documents); return eslist; }
public ActionResult GetData(string queryString = "", int pageIndex = 0, int pageSize = 5) { pageIndex++; var query = new MatchQuery() //多字段查询 { Field = "TITLE", Boost = 2.2, Query = queryString } || new MatchQuery() { Field = "PUBLISHING_PLACE", Boost = 0.3, Query = queryString }; //MatchQuery query = new MatchQuery() //单字段查询 //{ // Field = "TITLE ^ 2.2", // Query = queryString //}; List <ISort> sort = new List <ISort> { new SortField { Field = "_score", Order = SortOrder.Descending } }; PageResult <MainRCJournalInfo> list = _iService.PageResultSearcher(query, pageIndex, pageSize, sort); //分页查询 PageResult <MainRCJournalInfo> lis2t = _iService.PageResultSearcher2(queryString, pageIndex, pageSize); //分页查询 return(Json(list)); }
public async Task FindMatchAsync_ShouldBeEquivalentToMatch(Game game, ChallengeState state) { //Arrange var challengeFaker = TestData.FakerFactory.CreateChallengeFaker(83459632, game, state); var challenge = challengeFaker.FakeChallenge(); using var factory = new InMemoryDbContextFactory <ChallengesDbContext>(); await using (var context = factory.CreateContext()) { var challengeRepository = new ChallengeRepository(context); challengeRepository.Create(challenge); await challengeRepository.CommitAsync(); } await using (var context = factory.CreateContext()) { var matchQuery = new MatchQuery(context); foreach (var match in challenge.Participants.SelectMany(participant => participant.Matches).ToList()) { //Act var matchAsync = await matchQuery.FindMatchAsync(MatchId.FromGuid(match.Id)); //Arrange matchAsync.Should().BeEquivalentTo(match); } } }
public async Task FindParticipantMatchesAsync_ShouldBeEquivalentToParticipantMatchList(Game game, ChallengeState state) { //Arrange var challengeFaker = TestData.FakerFactory.CreateChallengeFaker(89568322, game, state); var challenge = challengeFaker.FakeChallenge(); using var factory = new InMemoryDbContextFactory <ChallengesDbContext>(); await using (var context = factory.CreateContext()) { var challengeRepository = new ChallengeRepository(context); challengeRepository.Create(challenge); await challengeRepository.CommitAsync(); } await using (var context = factory.CreateContext()) { var matchQuery = new MatchQuery(context); foreach (var participant in challenge.Participants) { //Act var matches = await matchQuery.FetchParticipantMatchesAsync(ParticipantId.FromGuid(participant.Id)); //Arrange matches.Should().BeEquivalentTo(participant.Matches.ToList()); } } }
public AmbiguousArgumentMatchException(DiscordIdType type, MatchQuery query, IDictionary <ulong, string> results) : base(GetMessage(type, query)) { Query = query; Type = type; Results = results; }
public int GetCount(string keyword, string field) { string indexname = ConfigurationManager.AppSettings["CRMIndex"].ToString(); string typename = ConfigurationManager.AppSettings["CRMMemberType"].ToString(); string ctype = ConfigurationManager.AppSettings["CRMMTrackType"].ToString(); if (string.IsNullOrEmpty(field)) { field = "memo"; } QueryContainer matchQuery = new MatchQuery() { Field = field.ToLower(), Query = keyword, Operator = Operator.And }; QueryContainer hasChildQuery = new HasChildQuery() { Type = ctype, Query = matchQuery }; var results = Connect.GetSearchClient().Count <Member>(c => c .Index(indexname) .Type(typename) .Query(hasChildQuery) ); return((int)results.Count); }
public static MatchQuery BuildMatchQuery(Aliyun.TableStore.DataModel.Search.Query.MatchQuery query) { MatchQuery.Builder builder = MatchQuery.CreateBuilder(); builder.SetFieldName(query.FieldName); builder.SetText(query.Text); if (query.MinimumShouldMatch != null) { builder.SetMinimumShouldMatch(query.MinimumShouldMatch.Value); } switch (query.Operator) { case Aliyun.TableStore.DataModel.Search.Query.QueryOperator.AND: builder.SetOperator(QueryOperator.AND); break; case Aliyun.TableStore.DataModel.Search.Query.QueryOperator.OR: builder.SetOperator(QueryOperator.OR); break; default: throw new ArgumentException("unsupported operator:" + query.Operator); } return(builder.Build()); }
public List <MemberContact> GetList(string keyword, string field, int start, int size) { string indexname = ConfigurationManager.AppSettings["CRMIndex"].ToString(); string typename = ConfigurationManager.AppSettings["CRMMenberContactType"].ToString(); if (string.IsNullOrEmpty(field)) { field = "_all"; } else { field = field.ToLower(); } //QueryContainer prefixQuery = new PrefixQuery() { Field = field, Value = keyword }; QueryContainer matchQuery = new MatchQuery() { Field = field, Query = keyword, Operator = Operator.And }; var searchResults = Connect.GetSearchClient().Search <MemberContact>(s => s .Index(indexname) .Type(typename) .Query(matchQuery) .From(start) .Size(size) ); List <MemberContact> eslist = new List <MemberContact>(searchResults.Documents); return(eslist); }
public string GetAllVehiclesElastic(String vehicles) { ElasticClient es = new ElasticClient(); es = EsClient(); QueryContainer ContQry = new QueryContainer(); MatchQuery Qry1 = new MatchQuery(); Qry1.Field = "deviceid"; Qry1.Operator = Operator.And; Qry1.Query = vehicles; ContQry = Qry1; SearchRequest esserach = new SearchRequest(); esserach.Query = ContQry; //SearchDescriptor<Driver> esdesct = new SearchDescriptor<Driver>(); // var esresponse = new SearchResponse<Driver>(); var esresponse = es.Search <Device>(esserach); DataTable dt = new DataTable(); string lnglat = ""; if (esresponse.Documents.Count > 0) { dt = ListToDataTable <Device>(esresponse.Documents.ToList()); lnglat = dt.Rows[dt.Rows.Count - 1]["LngLat"].ToString(); } return(lnglat); }
public DataTable GetDeviceRoute(String FromDt, String ToDt) { ElasticClient es = new ElasticClient(); es = EsClient(); QueryContainer ContQry = new QueryContainer(); MatchQuery Qry1 = new MatchQuery(); Qry1.Field = "deviceid"; Qry1.Operator = Operator.And; Qry1.Query = "26470"; ContQry = Qry1; SearchRequest esserach = new SearchRequest(); esserach.Query = ContQry; var esresponse = es.Search <Device>(esserach); DataTable dt = new DataTable(); //string lnglat = ""; if (esresponse.Documents.Count > 0) { dt = ListToDataTable <Device>(esresponse.Documents.ToList()); //lnglat = dt.Rows[dt.Rows.Count - 1]["LngLat"].ToString(); } return(dt); }
public void test_addSubQuery() { MatchQuery mq = new MatchQuery(); mq.addSubQuery("test"); Assert.AreEqual(1, mq.get_sub_queries().Count); }
public void Test_Search_Certificate_Authentication() { var config = TestConfiguration.GetConfiguration("basic"); config.UseSsl = true; ClientConfiguration.IgnoreRemoteCertificateNameMismatch = true; //ignore for now config.EnableDeadServiceUriPing = true; //temp must fix config.EnableCertificateAuthentication = true; config.CertificateFactory = CertificateFactory.GetCertificatesByPathAndPassword( new PathAndPasswordOptions { Path = TestContext.CurrentContext.TestDirectory + "\\client.pfx", Password = "******" }); using (var cluster = new Cluster(config)) { cluster.Authenticate(new CertAuthenticator()); var bucket = cluster.OpenBucket(); var query = new MatchQuery("inn"); var searchResult = bucket.Query(new SearchQuery { Index = "idx_test", Query = query }.Limit(10).Timeout(TimeSpan.FromMilliseconds(10000))); Assert.True(searchResult.Success); } }
public List <NewsBase> GetList(string keyword, string field, int start, int size) { string indexname = ConfigurationManager.AppSettings["IndexName"].ToString(); string typename = ConfigurationManager.AppSettings["TypeName"].ToString(); if (string.IsNullOrEmpty(field)) { field = "_all"; } QueryContainer matchQuery = new MatchQuery() { Field = field, Query = keyword, Operator = Operator.And }; //QueryContainer querystring = new QueryStringQuery() { Query = keyword, DefaultOperator = Operator.And }; var searchResults = Connect.GetSearchClient().Search <NewsBase>(s => s .Index(indexname) .Type(typename) .Query(matchQuery) //.Fields("newsid") .Sort(st => st.OnField(f => f.Newsid).Order(SortOrder.Descending)) /*按ID排序,id为数字,排序正常*/ .From(start) .Size(size) //.Highlight(h => h // .OnFields(f => f // .OnField("*") // .PreTags("<b style='color:red'>") // .PostTags("</b>"))) ); List <NewsBase> eslist = new List <NewsBase>(searchResults.Documents); return(eslist); }
public void test_SelectBetweenTeams() { /* Test with test data , kärpät, tps and tappara. Function should * returns all rows which contain only teams from parameter list (=6). */ List <string> teams = new List <string>(); teams.Add("Kärpät"); teams.Add("Tappara"); teams.Add("TPS"); MatchQuery mq = new MatchQuery(); mq.addSubQuery(db.SelectBetweenTeams(teams)); List <Match> rows = db.QueryMatches(mq.getQueryString()); Assert.AreEqual(6, rows.Count); teams.Clear(); teams.Add("TPS"); teams.Add("TPS"); teams.Add("TPS"); mq.clearSubQueries(); mq.addSubQuery(db.SelectBetweenTeams(teams)); rows = db.QueryMatches(mq.getQueryString()); Assert.AreEqual(0, rows.Count); }
protected QueryBase VisitLike(LikeNode node, ElasticQueryMapperState state) { // TODO: Move these 3 lines to separate method for reuse? var fieldName = GetFormattedFieldName(node); var valueNode = node.GetValueNode <string>(); var value = ValueFormatter.FormatValueForIndexStorage(valueNode.Value, fieldName); // TODO: Match/MatchPhrase? /* Like the match query, the match_phrase query first analyzes the query string to produce a list of terms. * It then searches for all the terms, but keeps only documents that contain all of the search terms, * in the same positions relative to each other. */ var query = new MatchQuery { Field = fieldName, Query = value.ToStringOrEmpty(), Boost = node.Boost, // TODO: Not sure if this is the best way to handle slop/similarity. // Use EditDistance if Slop > 0, otherwise use Ratio if MinimumSimilarity > 0 and not default, otherwise Auto Fuzziness = node.Slop > 0 ? Fuzziness.EditDistance(node.Slop) : node.MinimumSimilarity > 0 && node.MinimumSimilarity != 0.5f ? Fuzziness.Ratio(node.MinimumSimilarity) : Fuzziness.Auto }; return(query); }
public void test_addSubQuery_null_string() { /*empty string should not add anything to list.*/ MatchQuery mq = new MatchQuery(); mq.addSubQuery(null); Assert.AreEqual(0, mq.get_sub_queries().Count); }
public async Task <IActionResult> GetMatches([FromQuery] MatchQuery matchQuery) { var matches = await _matchService.GetAsync(matchQuery); var returnMatches = _mapper.Map <PaginatedList <MatchListDto> >(matches); return(Ok(returnMatches)); }
public void GetSingle_DoesNotExists() { // Arrange var componentUnderTest = new MatchQuery("four"); // Act componentUnderTest.GetSingle(); }
public void SerializerMatchQuery() { JsonSerializer jsonSerializer = new JsonSerializer(); MatchQuery matchQuery = new MatchQuery("fieldname", "fieldvalue"); string jsonString = jsonSerializer.Serialize(matchQuery); Console.WriteLine(jsonString); Assert.AreEqual(jsonString, "{\"match\":{\"fieldname\":\"fieldvalue\"}}"); }
public void test_SelectWherePlayoff_false() { MatchQuery mq = new MatchQuery(); mq.addSubQuery(db.SelectWherePlayoff(false)); List <Match> regularSeason = db.QueryMatches(mq.getQueryString()); Assert.AreEqual(13, regularSeason.Count); }
public void test_SelectWherePlayoff_true() { MatchQuery mq = new MatchQuery(); mq.addSubQuery(db.SelectWherePlayoff(true)); List <Match> playoff = db.QueryMatches(mq.getQueryString()); Assert.AreEqual(5, playoff.Count); }
public void test_SelectWhereGD_isAtLeast_false() { MatchQuery mq = new MatchQuery(); mq.addSubQuery(db.SelectWhereGD(2, false)); List <Match> matches = db.QueryMatches(mq.getQueryString()); Assert.AreEqual(14, matches.Count); }
public void test_SelectWhereOvertime_false() { MatchQuery mq = new MatchQuery(); mq.addSubQuery(db.SelectWhereOvertime(false)); List <Match> matches = db.QueryMatches(mq.getQueryString()); Assert.AreEqual(10, matches.Count); }
private static string GetMessage(DiscordIdType type, MatchQuery query) { return(type switch { DiscordIdType.User => $"There were multiple users found with the name '{query.Value}'.", DiscordIdType.Role => $"There were multiple roles found with the name '{query.Value}'.", DiscordIdType.Channel => $"There were multiple channels found with the name '{query.Value}'.", _ => throw new ArgumentOutOfRangeException(nameof(type), type, null) });
public ISearchResponse <Book> SearchBookWithAggregation(string criteria = "", string searchField = "", List <string> refinements = null, int count = 10) { QueryContainer _query; if (String.IsNullOrEmpty(criteria)) { _query = new MatchAllQuery(); } else { if (String.IsNullOrEmpty(searchField)) { searchField = "_all"; _query = new MatchQuery() { Field = searchField, Query = criteria }; } else { _query = new TermQuery() { Field = searchField, Value = criteria }; } } SearchRequest searchRequest = new SearchRequest { From = 0, Size = count, Query = _query }; if (refinements != null && refinements.Count > 0) { var _aggregations = new Dictionary <string, IAggregationContainer>(); foreach (var field in refinements) { _aggregations.Add(field, new AggregationContainer { Terms = new TermsAggregator { Field = field } }); } searchRequest.Aggregations = _aggregations; } return(esClient.Search <Book>(searchRequest)); }
public void MatchQuerySerializationTestsPosition() { var query = new MatchQuery() .Add("name", "Buena Vista") .Add("latitude", 34.06) .Add("longitude", -118.40); //Assert AreEqualQueries("values={\"name\":\"Buena Vista\",\"latitude\":\"34.06\",\"longitude\":\"-118.40\"}", query); }
public static QueryContainer Equal(string field, string value) { var query = new MatchQuery { Field = field, Query = value }; return(query); }
public void MatchQuerySerializationTests() { var query = new MatchQuery() .Add("name", "McDonalds") .Add("address", "10451 Santa Monica Blvd") .Add("region", "CA") .Add("postcode", "90025"); //Assert AreEqualQueries("values={\"name\":\"McDonalds\",\"address\":\"10451 Santa Monica Blvd\",\"region\":\"CA\",\"postcode\":\"90025\"}", query); }
public ValidateQueryRequestTests() { QueryContainer query = new MatchQuery { Field = "field", Query = "value" }; var request = new ValidateQueryRequest { Query = query }; var response = this._client.Validate(request); _status = response.ConnectionStatus; }
public int GetCount(string keyword, string field) { string indexname = ConfigurationManager.AppSettings["CRMIndex"].ToString(); string typename = ConfigurationManager.AppSettings["CRMMemberType"].ToString(); string ctype = ConfigurationManager.AppSettings["CRMMTrackType"].ToString(); if (string.IsNullOrEmpty(field)) { field = "memo"; } QueryContainer matchQuery = new MatchQuery() { Field = field.ToLower(), Query = keyword, Operator = Operator.And }; QueryContainer hasChildQuery = new HasChildQuery() { Type = ctype, Query = matchQuery }; var results = Connect.GetSearchClient().Count<Member>(c => c .Index(indexname) .Type(typename) .Query(hasChildQuery) ); return (int)results.Count; }
public List<MemberContact> GetList(string keyword, string field, int start, int size) { string indexname = ConfigurationManager.AppSettings["CRMIndex"].ToString(); string typename = ConfigurationManager.AppSettings["CRMMenberContactType"].ToString(); if (string.IsNullOrEmpty(field)) { field = "_all"; } else { field = field.ToLower(); } //QueryContainer prefixQuery = new PrefixQuery() { Field = field, Value = keyword }; QueryContainer matchQuery = new MatchQuery() { Field = field, Query = keyword, Operator = Operator.And }; var searchResults = Connect.GetSearchClient().Search<MemberContact>(s => s .Index(indexname) .Type(typename) .Query(matchQuery) .From(start) .Size(size) ); List<MemberContact> eslist = new List<MemberContact>(searchResults.Documents); return eslist; }
public int GetCount(string keyword, string field) { int count = 0; string indexname = ConfigurationManager.AppSettings["CRMIndex"].ToString(); string typename = ConfigurationManager.AppSettings["CRMMenberContactType"].ToString(); if (string.IsNullOrEmpty(field)) { field = "_all"; } else { field = field.ToLower(); } //QueryContainer prefixQuery = new PrefixQuery() { Field = field, Value = keyword }; QueryContainer matchQuery = new MatchQuery() { Field = field, Query = keyword, Operator = Operator.And }; //调用仅取数量方法 var counts = Connect.GetSearchClient().Count<MemberContact>(s => s .Index(indexname) .Type(typename) .Query(matchQuery) ); count = (int)counts.Count; return count; }
internal SearchRequest CreateRequestFromExpression(Expression expression) { Visit(expression); QueryContainer query = new MatchQuery { Field = ToCamelCase(_fieldName), Query = _term }; var searchRequest = new SearchRequest { From = 0, Size = 10, Query = query }; return searchRequest; }
public int GetCount(string keyword,string type ) { int count = 0; string indexname = ConfigurationManager.AppSettings["IndexName"].ToString(); string typename = ConfigurationManager.AppSettings["TypeName"].ToString(); if (string.IsNullOrEmpty(type)) { type = "_all"; } QueryContainer matchQuery = new MatchQuery() { Field = type, Query = keyword, Operator = Operator.And }; QueryContainer querystring = new QueryStringQuery() { Query = keyword, DefaultOperator = Operator.And }; //调用仅取数量方法 var counts = Connect.GetSearchClient().Count<NewsBase>(s => s .Index(indexname) .Type(typename) .Query(matchQuery) ); count = (int)counts.Count; return count; }
public Task<ISearchResponse<Book>> SearchBookWithAggregation_Aync(string criteria = "", string searchField = "", List<string> refinements = null, int count = 10) { Task<ISearchResponse<Book>> tSearch = Task.Factory.StartNew(() => { QueryContainer _query; if (String.IsNullOrEmpty(criteria)) { _query = new MatchAllQuery(); } else { if (String.IsNullOrEmpty(searchField)) { searchField = "_all"; _query = new MatchQuery() { Field = searchField, Query = criteria }; } else { _query = new TermQuery() { Field = searchField, Value = criteria }; } } SearchRequest searchRequest = new SearchRequest { From = 0, Size = count, Query = _query }; if (refinements != null && refinements.Count > 0) { var _aggregations = new Dictionary<string, IAggregationContainer>(); foreach (var field in refinements) { _aggregations.Add(field, new AggregationContainer { Terms = new TermsAggregator { Field = field } }); } searchRequest.Aggregations = _aggregations; } var qResult = esClient.Search<Book>(searchRequest); return qResult; }); return tSearch; }
public ISearchResponse<Book> SearchBookWithAggregationFilters(string criteria = "", string searchField = "", List<string> refinements = null, Dictionary<string,string> SearchFilters = null, int count = 10) { QueryContainer _query; if (String.IsNullOrEmpty(criteria)) { _query = new MatchAllQuery(); } else { if (String.IsNullOrEmpty(searchField)) { searchField = "_all"; _query = new MatchQuery() { Field = searchField, Query = criteria }; } else { _query = new TermQuery() { Field = searchField, Value = criteria }; } } SearchRequest searchRequest = new SearchRequest { From = 0, Size = count, Query = _query }; if (refinements != null && refinements.Count > 0) { var _aggregations = new Dictionary<string, IAggregationContainer>(); foreach (var field in refinements) { _aggregations.Add(field, new AggregationContainer { Terms = new TermsAggregator { Field = field } }); } searchRequest.Aggregations = _aggregations; } if (SearchFilters != null && SearchFilters.Count > 0) { var searchFilterConfig = new FilterContainer(); foreach(var sf in SearchFilters) { searchFilterConfig = Filter<Book>.Term( sf.Key, sf.Value ); } searchRequest.Filter = searchFilterConfig; } return esClient.Search<Book>(searchRequest); }
public ISearchResponse<Book> MultiMatchANDSearch(List<AdvancedSearchFilter> SearchCriteria, List<string> refinements = null, Dictionary<string, string> SearchFilters = null, int count = 10) { QueryContainer _query = null; foreach(var rec in SearchCriteria) { if ((!String.IsNullOrEmpty(rec.SearchField)) && (!String.IsNullOrEmpty(rec.SearchField))) { var qry = new MatchQuery() { Field = rec.SearchField, Query = rec.SearchQuery }; if (_query == null) _query = qry; else _query = _query && qry; } } SearchRequest searchRequest = new SearchRequest { From = 0, Size = count, Query = _query }; if (refinements != null && refinements.Count > 0) { var _aggregations = new Dictionary<string, IAggregationContainer>(); foreach (var field in refinements) { _aggregations.Add(field, new AggregationContainer { Terms = new TermsAggregator { Field = field } }); } searchRequest.Aggregations = _aggregations; } if (SearchFilters != null && SearchFilters.Count > 0) { var searchFilterConfig = new FilterContainer(); foreach (var sf in SearchFilters) { searchFilterConfig = Filter<Book>.Term(sf.Key, sf.Value); } searchRequest.Filter = searchFilterConfig; } return esClient.Search<Book>(searchRequest); }
public int GetCountByM(SearchCondition sc) { int count = 0; string indexname = ConfigurationManager.AppSettings["CRMIndex"].ToString(); string typename = ConfigurationManager.AppSettings["CRMMemberType"].ToString(); string field = ""; if (string.IsNullOrEmpty(sc.field)) { field = ""; } else { field = sc.field.ToLower(); } string classVaule = ""; if (string.IsNullOrEmpty(sc.classx)) { sc.classx = ""; } else { sc.classx = sc.classx.ToLower(); classVaule = "1"; } //must List<QueryContainer> mustquerys = new List<QueryContainer>(); if (field.Equals("lastcontacttime")) { string timeG = sc.keywords[0]; string timeL = DateTime.Parse(timeG).AddDays(-7).ToString("yyyy-MM-dd"); QueryContainer rangeQuyery = new RangeQuery() { Field = field, GreaterThanOrEqualTo = timeL, LowerThanOrEqualTo = timeG, TimeZone = "+08:00" }; mustquerys.Add(rangeQuyery); } else if (field.Equals("enterprise")) { foreach (string keyw in sc.keywords) { List<QueryContainer> shouooo = new List<QueryContainer>(); QueryContainer termQ = new TermQuery() { Field = "enterprise", Value = sc.keyword.Replace(',', ' ') }; QueryContainer lowerQuery = new WildcardQuery() { Field = "enterprise", Value = string.IsNullOrEmpty(keyw) ? "*" : string.Format("*{0}*", keyw.ToLower()) }; QueryContainer notlowerQuery = new WildcardQuery() { Field = "enterprise.lower", Value = string.IsNullOrEmpty(keyw) ? "*" : string.Format("*{0}*", keyw.ToLower()) }; shouooo.Add(termQ); shouooo.Add(lowerQuery); shouooo.Add(notlowerQuery); QueryContainer boooQuery = new BoolQuery() { Should = shouooo }; mustquerys.Add(boooQuery); } } else { foreach (string keyw in sc.keywords) { QueryContainer wildcardQuery = new WildcardQuery() { Field = field, Value = string.IsNullOrEmpty(keyw) ? "*" : string.Format("*{0}*", keyw) }; mustquerys.Add(wildcardQuery); } } QueryContainer matchQueryT = new MatchQuery() { Field = "tracktypeid", Query = Convert.ToString(sc.tracktype) }; QueryContainer matchQueryC = new MatchQuery() { Field = sc.classx, Query = classVaule }; QueryContainer queryCountry = new WildcardQuery() { Field = "country", Value = string.Format("*{0}*", sc.country) }; QueryContainer queryProvince = new WildcardQuery() { Field = "province", Value = string.Format("*{0}*", sc.province) }; QueryContainer queryCity = new WildcardQuery() { Field = "city", Value = string.Format("*{0}*", sc.city) }; if (!string.IsNullOrEmpty(sc.tracktype)) { mustquerys.Add(matchQueryT); } if (!string.IsNullOrEmpty(sc.classx)) { mustquerys.Add(matchQueryC); } if (!string.IsNullOrEmpty(sc.country)) { mustquerys.Add(queryCountry); } if (!string.IsNullOrEmpty(sc.province)) { mustquerys.Add(queryProvince); } if (!string.IsNullOrEmpty(sc.city)) { mustquerys.Add(queryCity); } QueryContainer boolQuery = new BoolQuery() { Must = mustquerys }; //QueryContainer wildcardQuery = new WildcardQuery() { Field = field, Value = string.IsNullOrEmpty(sc.keyword) ? "*" : string.Format("*{0}*", sc.keyword) }; var searchResults = Connect.GetSearchClient().Count<Member>(s => s .Index(indexname) .Type(typename) .Query(boolQuery) ); count = (int)searchResults.Count; return count; }
/// <summary> /// WEBAPI使用方法,直接获取Member /// </summary> /// <param name="sc"></param> /// <param name="em"></param> /// <returns></returns> public string GetMember(SearchCondition sc, out int em) { string indexname = ConfigurationManager.AppSettings["CRMIndex"].ToString(); string typename = ConfigurationManager.AppSettings["CRMMemberType"].ToString(); string field = ""; if (string.IsNullOrEmpty(sc.field)) { field = ""; } else { field = sc.field.ToLower(); } string classVaule = ""; if (string.IsNullOrEmpty(sc.classx)) { sc.classx = ""; } else { sc.classx = sc.classx.ToLower(); classVaule = "1"; } //must List<QueryContainer> mustquerys = new List<QueryContainer>(); if (field.Equals("lastcontacttime")) { string timeG = sc.keywords[0]; string timeL = DateTime.Parse(timeG).AddDays(-7).ToString("yyyy-MM-dd"); QueryContainer rangeQuyery = new RangeQuery() { Field = field, GreaterThanOrEqualTo = timeL, LowerThanOrEqualTo = timeG, TimeZone = "+08:00" }; mustquerys.Add(rangeQuyery); } else if (field.Equals("enterprise")) { foreach (string keyw in sc.keywords) { List<QueryContainer> shouooo = new List<QueryContainer>(); QueryContainer termQ = new TermQuery() { Field = "enterprise", Value = sc.keyword.Replace(',', ' ') }; QueryContainer lowerQuery = new WildcardQuery() { Field = "enterprise", Value = string.IsNullOrEmpty(keyw) ? "*" : string.Format("*{0}*", keyw.ToLower()) }; QueryContainer notlowerQuery = new WildcardQuery() { Field = "enterprise.lower", Value = string.IsNullOrEmpty(keyw) ? "*" : string.Format("*{0}*", keyw.ToLower()) }; shouooo.Add(termQ); shouooo.Add(lowerQuery); shouooo.Add(notlowerQuery); QueryContainer boooQuery = new BoolQuery() { Should = shouooo }; mustquerys.Add(boooQuery); } } else { foreach (string keyw in sc.keywords) { QueryContainer wildcardQuery = new WildcardQuery() { Field = field, Value = string.IsNullOrEmpty(keyw) ? "*" : string.Format("*{0}*", keyw) }; mustquerys.Add(wildcardQuery); } } QueryContainer matchQueryT = new MatchQuery() { Field = "tracktypeid", Query = Convert.ToString(sc.tracktype) }; QueryContainer matchQueryC = new MatchQuery() { Field = sc.classx, Query = classVaule }; QueryContainer queryCountry = new WildcardQuery() { Field = "country", Value = string.Format("*{0}*", sc.country) }; QueryContainer queryProvince = new WildcardQuery() { Field = "province", Value = string.Format("*{0}*", sc.province) }; QueryContainer queryCity = new WildcardQuery() { Field = "city", Value = string.Format("*{0}*", sc.city) }; if (!string.IsNullOrEmpty(sc.tracktype)) { mustquerys.Add(matchQueryT); } if (!string.IsNullOrEmpty(sc.classx)) { mustquerys.Add(matchQueryC); } if (!string.IsNullOrEmpty(sc.country)) { mustquerys.Add(queryCountry); } if (!string.IsNullOrEmpty(sc.province)) { mustquerys.Add(queryProvince); } if (!string.IsNullOrEmpty(sc.city)) { mustquerys.Add(queryCity); } QueryContainer boolQuery = new BoolQuery() { Must = mustquerys }; var searchResults = Connect.GetSearchClient().Search<Member>(s => s .Index(indexname) .Type(typename) .Fields(f => f.Id, f => f.Enterprise, f => f.Isstar, f => f.Masterlinkman, f => f.Tracktypeid, f => f.Sourceid, f => f.Lastcontacttime, f => f.Enddate, f => f.Adminname, f => f.Addtime) .Query(boolQuery) .Sort(st => st.OnField(f => f.Lastcontacttime).Order(SortOrder.Descending)) /*排序*/ .From(sc.start) .Size(sc.size) ); em = searchResults.ElapsedMilliseconds; StringBuilder ResultJson = new StringBuilder(""); ResultJson.Append("["); foreach (var hit in searchResults.Hits) { ResultJson.Append("{"); ResultJson.Append( String.Join(",", hit.Fields.FieldValuesDictionary .Select(FVD => "'" + FVD.Key + "':'" + FVD.Value.ToString().Replace("[", "").Replace("]", "") + "'") .ToArray() ) ); ResultJson.Append("},"); } if (ResultJson.Length > 1) ResultJson.Length = ResultJson.Length - 1; ResultJson.Append("]"); return ResultJson.ToString(); }
public void AreEqualQueries(string decodedQueryString, MatchQuery query) { Assert.AreEqual(decodedQueryString, DecodeQueryString(query.ToUrlQuery())); }
static void Main(string[] args) { Console.WriteLine("Welcome to world of elasticSearch!"); var node = new Uri("http://localhost:9200"); var settings = new ConnectionSettings( node, defaultIndex: "uauto"); var client = new ElasticClient(settings); //load data to ES //using (Context ctx = new Context()) //{ // foreach (UAutoContractJournalItem item in ctx.UAutoContractJournalItem) // { // client.Index(item); // } //} #region Use Object Initializer Syntax QueryContainer query = new MatchQuery { Field = "insuredLastName", Query = "Тарелкин" }; var searchRequest = new SearchRequest { From = 0, Size = 10, Query = query }; var searchResult = client.Search<UAutoContractJournalItem>(searchRequest); Console.WriteLine(Encoding.UTF8.GetString(searchResult.RequestInformation.Request)); Console.WriteLine("{0} was found (OIS)", searchResult.Total); #endregion #region Lambda version searchResult = client.Search<UAutoContractJournalItem>(s => s .From(0) .Size(10) .Query(q => q.Term(p => p.InsuredLastName, "Тарелкин")) ); searchResult = client.Search<UAutoContractJournalItem>(s => s .From(0) .Size(10) .Query(q => q.Match(x => x.OnField(f => f.InsuredLastName).Query("Тарелкин"))) ); Console.WriteLine(Encoding.UTF8.GetString(searchResult.RequestInformation.Request)); Console.WriteLine("{0} was found (Lambda)", searchResult.Total); #endregion Console.WriteLine("Work complete"); Console.ReadKey(); }