Пример #1
0
        /// <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));
        }
Пример #2
0
 /// <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);
 }
Пример #3
0
 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));
 }
Пример #4
0
 /// <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);
 }
Пример #5
0
 /// <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));
 }
Пример #6
0
        /// <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);
        }
Пример #7
0
 /// <summary>
 /// 搜索
 /// </summary>
 /// <param name="searchQuery"></param>
 /// <returns></returns>
 public virtual SearchResultInfo Search(SearchQueryInfo searchQuery)
 {
     return(SearchRepository.Search(searchQuery));
 }
Пример #8
0
        /// <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();
            }
        }
Пример #9
0
        /// <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);
        }
Пример #10
0
 /// <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);
     }
 }