/// <summary> /// 搜索 /// </summary> /// <param name="searchkey"></param> /// <param name="relateKey"></param> /// <param name="oname"></param> /// <param name="ps"></param> /// <param name="page"></param> /// <returns></returns> public virtual ActionResult Index(string searchkey, string relateKey, string oname, string ps, int?page) { var model = new GoodsListModel { ActionName = "Search", SearchKey = string.IsNullOrEmpty(searchkey) ? "" : searchkey.Trim(), PropertyName = Server.UrlDecode(ps), OrderbyName = oname, PageIndex = page.HasValue ? page.Value : 0, }; try { model.SetExistSearchProperties(model.PropertyName); var searchQuery = new SearchQueryInfo { Name = "Goods", Key = model.SearchKey }; var result = Ioc.Resolve <ISearchApplicationService>().Search(searchQuery); FillSearchGoods(model, result); FillCategory(model); SetSearchPropertiesByCategory(model); SaveKey(searchkey, relateKey); SetSearchView(model, result); } catch (Exception) { } return(View("/Views/Home/index.cshtml", model)); }
/// <summary> /// 重写 /// </summary> /// <param name="storeIndex"></param> /// <param name="searchQuery"></param> /// <param name="result"></param> /// <param name="documentIds"></param> protected override void AddSearchDocuments(StoreIndexInfo storeIndex, SearchQueryInfo searchQuery, SearchResultInfo result, IList <long> documentIds) { if (searchQuery.Conditions != null && searchQuery.Conditions.Count(it => _keys.Contains(it.Key)) > 0) { return; } base.AddSearchDocuments(storeIndex, searchQuery, result, documentIds); }
public virtual SearchResultInfo Search(SearchQueryInfo searchQuery) { if (searchQuery == null) { return(null); } searchQuery.Key = searchQuery.Key.Trim(); if (string.IsNullOrEmpty(searchQuery.Key)) { return(null); } return(Ioc.Resolve <ISearchApplicationService>().Search(searchQuery)); }
/// <summary> /// 搜索 /// </summary> /// <param name="searchQuery"></param> /// <returns></returns> public virtual SearchResultInfo Search(SearchQueryInfo searchQuery) { try { var rev = WcfService.Invoke <ISearchContract>(SearchIndex, searchQuery); if (rev == null) { return(null); } return((SearchResultInfo)rev); } catch (Exception ex) { Winner.Creator.Get <Winner.Log.ILog>().AddException(ex); } return(null); }
/// <summary> /// 搜索 /// </summary> /// <param name="searchQuery"></param> /// <returns></returns> public virtual SearchResultInfo Search(SearchQueryInfo searchQuery) { // searchQuery.CecheTime = DateTime.Now.AddMinutes(2); return(Creator.Get <IIndexer>().Search(searchQuery)); }
/// <summary> /// Connects to a profile server and performs a search query on it and downloads all possible results. /// </summary> /// <param name="Server">Profile server to query.</param> /// <param name="NameFilter">Name filter of the search query, or null if name filtering is not required.</param> /// <param name="TypeFilter">Type filter of the search query, or null if type filtering is not required.</param> /// <param name="LocationFilter">Location filter of the search query, or null if location filtering is not required.</param> /// <param name="Radius">If <paramref name="LocationFilter"/> is not null, this is the radius of the target area.</param> /// <param name="IncludeHostedOnly">If set to true, the search results should only include profiles hosted on the queried profile server.</param> /// <param name="IncludeImages">If set to true, the search results should include images.</param> /// <returns>List of results or null if the function fails.</returns> public async Task <SearchQueryInfo> SearchQueryAsync(ProfileServer Server, string NameFilter, string TypeFilter, GpsLocation LocationFilter, int Radius, bool IncludeHostedOnly, bool IncludeImages) { log.Trace("()"); SearchQueryInfo res = null; bool connected = false; try { await ConnectAsync(Server.IpAddress, Server.ClientNonCustomerInterfacePort, true); connected = true; if (await StartConversationAsync()) { uint maxResults = (uint)(IncludeImages ? 1000 : 10000); uint maxResponseResults = (uint)(IncludeImages ? 100 : 1000); PsProtocolMessage requestMessage = messageBuilder.CreateProfileSearchRequest(TypeFilter, NameFilter, null, LocationFilter, (uint)Radius, maxResponseResults, maxResults, IncludeHostedOnly, IncludeImages); await SendMessageAsync(requestMessage); PsProtocolMessage responseMessage = await ReceiveMessageAsync(); bool idOk = responseMessage.Id == requestMessage.Id; bool statusOk = responseMessage.Response.Status == Status.Ok; bool searchRequestOk = idOk && statusOk; if (searchRequestOk) { int totalResultCount = (int)responseMessage.Response.ConversationResponse.ProfileSearch.TotalRecordCount; List <byte[]> coveredServers = new List <byte[]>(); foreach (ByteString coveredServerId in responseMessage.Response.ConversationResponse.ProfileSearch.CoveredServers) { coveredServers.Add(coveredServerId.ToByteArray()); } List <IdentityNetworkProfileInformation> results = responseMessage.Response.ConversationResponse.ProfileSearch.Profiles.ToList(); while (results.Count < totalResultCount) { int remaining = Math.Min((int)maxResponseResults, totalResultCount - results.Count); requestMessage = messageBuilder.CreateProfileSearchPartRequest((uint)results.Count, (uint)remaining); await SendMessageAsync(requestMessage); responseMessage = await ReceiveMessageAsync(); idOk = responseMessage.Id == requestMessage.Id; statusOk = responseMessage.Response.Status == Status.Ok; searchRequestOk = idOk && statusOk; if (!searchRequestOk) { break; } results.AddRange(responseMessage.Response.ConversationResponse.ProfileSearchPart.Profiles.ToList()); } res = new SearchQueryInfo(); res.CoveredServers = coveredServers; res.Results = results; } } } catch (Exception e) { log.Error("Exception occurred: {0}", e.ToString()); } if (connected) { CloseTcpClient(); } if (res != null) { log.Trace("(-):*.Results.Count={0},*.CoveredServers.Count={1}", res.Results.Count, res.CoveredServers.Count); } else { log.Trace("(-):null"); } return(res); }
/// <summary> /// 搜索 /// </summary> /// <param name="searchQuery"></param> /// <returns></returns> public virtual SearchResultInfo Search(SearchQueryInfo searchQuery) { return(SearchRepository.Search(searchQuery)); }
/// <summary> /// 排序 /// </summary> /// <param name="documentIds"></param> /// <param name="storeIndex"></param> /// <param name="result"></param> /// <param name="searchQuery"></param> protected virtual void OrderbyDocuments(IList <long> documentIds, StoreIndexInfo storeIndex, SearchResultInfo result, SearchQueryInfo searchQuery) { if (searchQuery.Conditions.ContainsKey("Seqence")) { switch (searchQuery.Conditions["Seqence"].ToString()) { case "costasc": if (searchQuery.PageSize > 0) { result.Documents = result.Documents.OrderBy(it => it.Feilds[4].Text.Convert <decimal>()) .Skip(searchQuery.PageIndex * searchQuery.PageSize) .Take(searchQuery.PageSize) .ToList(); } else { result.Documents = result.Documents.OrderBy(it => it.Feilds[4].Text.Convert <decimal>()).ToList(); } break; case "costdesc": if (searchQuery.PageSize > 0) { result.Documents = result.Documents.OrderByDescending(it => it.Feilds[4].Text.Convert <decimal>()) .Skip(searchQuery.PageIndex * searchQuery.PageSize) .Take(searchQuery.PageSize) .ToList(); } else { result.Documents = result.Documents.OrderByDescending(it => it.Feilds[4].Text.Convert <decimal>()).ToList(); } break; case "prasc": if (searchQuery.PageSize > 0) { result.Documents = result.Documents.OrderBy(it => it.Feilds[5].Text.Convert <decimal>()) .Skip(searchQuery.PageIndex * searchQuery.PageSize) .Take(searchQuery.PageSize) .ToList(); } else { result.Documents = result.Documents.OrderBy(it => it.Feilds[5].Text.Convert <decimal>()).ToList(); } break; case "prdesc": if (searchQuery.PageSize > 0) { result.Documents = result.Documents.OrderByDescending(it => it.Feilds[5].Text.Convert <decimal>()) .Skip(searchQuery.PageIndex * searchQuery.PageSize) .Take(searchQuery.PageSize) .ToList(); } else { result.Documents = result.Documents.OrderByDescending(it => it.Feilds[5].Text.Convert <decimal>()).ToList(); } break; case "ptdesc": if (searchQuery.PageSize > 0) { result.Documents = result.Documents.OrderByDescending(it => it.Feilds[7].Text.Convert <DateTime>()) .Skip(searchQuery.PageIndex * searchQuery.PageSize) .Take(searchQuery.PageSize) .ToList(); } else { result.Documents = result.Documents.OrderByDescending(it => it.Feilds[7].Text.Convert <DateTime>()).ToList(); } break; case "scasc": if (searchQuery.PageSize > 0) { result.Documents = result.Documents.OrderByDescending(it => it.Feilds[8].Text.Convert <int>()) .Skip(searchQuery.PageIndex * searchQuery.PageSize) .Take(searchQuery.PageSize) .ToList(); } else { result.Documents = result.Documents.OrderByDescending(it => it.Feilds[8].Text.Convert <int>()).ToList(); } break; } } else if (searchQuery.PageSize > 0) { result.Documents = result.Documents.Skip(searchQuery.PageIndex * searchQuery.PageSize) .Take(searchQuery.PageSize) .ToList(); } }
/// <summary> /// 得到搜索编号 /// </summary> /// <param name="storeIndex"></param> /// <param name="result"></param> /// <param name="searchQuery"></param> /// <returns></returns> protected override IList <long> GetSearchDocumentIds(StoreIndexInfo storeIndex, SearchResultInfo result, SearchQueryInfo searchQuery) { var documentIds = base.GetSearchDocumentIds(storeIndex, result, searchQuery); if (documentIds != null && searchQuery.Conditions != null && searchQuery.Conditions.Count(it => _keys.Contains(it.Key)) > 0) { FilterDocuments(documentIds, storeIndex, result, searchQuery); OrderbyDocuments(documentIds, storeIndex, result, searchQuery); if (result.Documents != null) { return(result.Documents.Select(it => it.Id).ToList()); } } return(documentIds); }
/// <summary> /// 过滤条件 /// </summary> /// <param name="documentIds"></param> /// <param name="storeIndex"></param> /// <param name="result"></param> /// <param name="searchQuery"></param> protected virtual void FilterDocuments(IList <long> documentIds, StoreIndexInfo storeIndex, SearchResultInfo result, SearchQueryInfo searchQuery) { foreach (var documentId in documentIds) { var document = Documentor.GetInfo(storeIndex, documentId); if (document == null || document.Feilds == null) { continue; } if (searchQuery.Conditions.ContainsKey("IsCustom") && document.Feilds.Count > 6 && !document.Feilds[6].Text.Convert <bool>() != searchQuery.Conditions["IsCustom"].Convert <bool>()) { continue; } if (searchQuery.Conditions.ContainsKey("StartCost") && document.Feilds.Count > 4 && document.Feilds[4].Text.Convert <decimal>() < searchQuery.Conditions["StartCost"].Convert <decimal>()) { continue; } if (searchQuery.Conditions.ContainsKey("EndCost") && document.Feilds.Count > 4 && document.Feilds[4].Text.Convert <decimal>() > searchQuery.Conditions["EndCost"].Convert <decimal>()) { continue; } if (searchQuery.Conditions.ContainsKey("StartPrice") && document.Feilds.Count > 5 && document.Feilds[5].Text.Convert <decimal>() < searchQuery.Conditions["StartPrice"].Convert <decimal>()) { continue; } if (searchQuery.Conditions.ContainsKey("EndPrice") && document.Feilds.Count > 5 && document.Feilds[5].Text.Convert <decimal>() > searchQuery.Conditions["EndPrice"].Convert <decimal>()) { continue; } if (searchQuery.Conditions.ContainsKey("Sku") && document.Feilds.Count > 3 && !string.IsNullOrEmpty(document.Feilds[3].Text)) { var texts = searchQuery.Conditions["Sku"].ToString().Split(','); var values = document.Feilds[3].Text.Split(','); var rev = texts.All(text => CheckValue(values, text)); if (rev) { continue; } } result.Documents.Add(document); } }