Exemplo n.º 1
0
        public async Task Search()
        {
            WebRequest  req      = WebRequest.Create(SearchUrl + "&json=true");
            WebResponse response = await req.GetResponseAsync();

            using StreamReader reader = new StreamReader(response.GetResponseStream());
            string json = reader.ReadToEnd();
            SearchResultWrapper result = SerializerService.Deserialize <SearchResultWrapper>(json);

            if (!result.Success)
            {
                throw new Exception("Did not succede");
            }

            Application.Current.Dispatcher.Invoke(() =>
            {
                this.PopularToday.Clear();

                if (result.SearchResults != null)
                {
                    foreach (SearchResult searchResult in result.SearchResults)
                    {
                        this.PopularToday.Add(searchResult);
                    }
                }
            });
        }
Exemplo n.º 2
0
        public IActionResult Search(string id, [FromBody] SearchRequest request)
        {
            if (GlobalStore.ServiceAliases.IsExist(id))
            {
                id = GlobalStore.ServiceAliases.Get(id);
            }

            var validationResult = serviceManager.ValidateIfServiceActive(id, ServiceTypeEnum.Search);

            if (validationResult != null)
            {
                return(validationResult);
            }

            var defaultSettings = GlobalStore.ActivatedSearches.Get(id).SearchSettingsWrapper;

            if (request.AutoCompleteSettings != null)
            {
                validationResult = Validate(request.AutoCompleteSettings);
                if (validationResult != null)
                {
                    return(validationResult);
                }
            }
            if (request.ClassifierSettings != null)
            {
                validationResult = Validate(request.ClassifierSettings);
                if (validationResult != null)
                {
                    return(validationResult);
                }
            }
            if (request.SearchSettings != null)
            {
                validationResult = Validate(defaultSettings.DataSetName, request.SearchSettings);
                if (validationResult != null)
                {
                    return(validationResult);
                }
            }

            var searchSettings = MergeSettings(
                defaultSettings,
                request.AutoCompleteSettings,
                request.ClassifierSettings,
                request.SearchSettings);

            var dataSet = GlobalStore.DataSets.Get(searchSettings.DataSetName);
            var result  = new SearchResultWrapper();

            searchHandler.SaveSearchRequest(searchSettings, request);

            var documentQuery  = queryFactory.GetDocumentQuery(dataSet.DataSet.Name);
            var searchResponse = documentQuery.Search(
                searchSettings.AutoCompleteSettings,
                searchSettings.SearchSettings,
                request.Text,
                dataSet.DocumentFields,
                dataSet.DataSet.TagField,
                dataSet.DataSet.InterpretedFields,
                defaultSettings.SearchSettings.Filter,
                defaultSettings.SearchSettings.Weights
                );

            // AUTOCOMPLETE
            result.AutoCompleteResultList = searchResponse.Suggest?[DocumentQuery.SuggestName].SelectMany(s => s.Options).Where(o => o.CollateMatch).Select(o =>
                                                                                                                                                            new AutoCompleteResult
            {
                Text  = o.Text,
                Score = o.Score,
            }).ToList();

            // SEARCH
            result.SearchResultList = searchResponse.Hits.Select(d =>
                                                                 new SearchResult
            {
                Document   = d.Source.DocumentObject,
                DocumentId = d.Id,
                Score      = d.Score
            }).ToList();
            result.Total = (int)searchResponse.Total;

            // CLASSIFIER
            if (searchSettings.ClassifierSettings?.Count > 0)
            {
                var searchMatchCategories = (dataSet.TagIsArray
                    ? result.SearchResultList.SelectMany(d => ((Array)DocumentHelper.GetValue(d.Document, dataSet.DataSet.TagField)).Cast <string>())
                    : result.SearchResultList.Select(d => DocumentHelper.GetValue(d.Document, dataSet.DataSet.TagField).ToString()))
                                            .Distinct()
                                            .ToDictionary(t => t);

                var classifierId = GlobalStore.ServiceAliases.IsExist(searchSettings.ClassifierSettings.Id) ? GlobalStore.ServiceAliases.Get(searchSettings.ClassifierSettings.Id) : searchSettings.ClassifierSettings.Id;
                var classifier   = GlobalStore.ActivatedClassifiers.Get(classifierId);
                //if the classifier is not activated right now
                if (classifier != null)
                {
                    var resultsList = classifierHandler.Recommend(classifierId, request.Text, searchSettings.ClassifierSettings.Count, classifier.ClassifierEmphasizedTagIds.Any(), true);

                    result.ClassifierResultList = resultsList.Select(r => new SearchClassifierRecommendationResult
                    {
                        TagId             = r.TagId,
                        Score             = r.Score,
                        Tag               = r.Tag,
                        SearchResultMatch = searchMatchCategories.ContainsKey(r.TagId)
                    }).ToList();

                    //AUTOCOMPLETE
                    foreach (var ac in result.AutoCompleteResultList)
                    {
                        var acResultsList = classifierHandler.Recommend(classifierId, ac.Text, searchSettings.ClassifierSettings.Count, classifier.ClassifierEmphasizedTagIds.Any(), true);
                        ac.ClassifierResultList = resultsList.Select(r => new SearchClassifierRecommendationResult
                        {
                            TagId             = r.TagId,
                            Score             = r.Score,
                            Tag               = r.Tag,
                            SearchResultMatch = searchMatchCategories.ContainsKey(r.TagId)
                        }).ToList();
                    }
                }
            }
            return(new OkObjectResult(result));
        }