예제 #1
0
        public AdvancedSearchResult AdvancedSearch(string input)
        {
            input = input.ToLower();
            var result = new AdvancedSearchResult();

            var allCommandAliases = ListAllCommandAliases();
            var possibleCommand   = allCommandAliases.FirstOrDefault(x => x == input);

            var allModuleAlliases = ListAllModuleAliases();
            var possibleModule    = allModuleAlliases.FirstOrDefault(x => x == input);

            if (!string.IsNullOrEmpty(possibleModule) || possibleModule == possibleCommand && !string.IsNullOrEmpty(possibleModule))
            {
                var module = Modules.FirstOrDefault(x => x.Aliases.Contains(possibleModule));
                if (module is null)
                {
                    module = Modules.FirstOrDefault(x => x.Name == possibleModule);
                }
                result = new AdvancedSearchResult(module, null);
            }

            else if (!string.IsNullOrEmpty(possibleCommand))
            {
                var cmd = Commands.FirstOrDefault(x => x.Aliases.Contains(possibleCommand));
                result = new AdvancedSearchResult(null, cmd);
            }

            else
            {
                throw new Exception("Could not find a category or command for the given input.");
            }

            return(result);
        }
예제 #2
0
        public void SimpleSearch(String q)
        {
            String request;
            int    resultCount = 500; // Количество выдаваемых результатов

            /* Формируем строку запросу к Oracle UCM */
            if (string.IsNullOrWhiteSpace(q))
            {
                request = "a";
            }
            else
            {
                request = "xDocAnnotation <substring> `" + q.ToLower() +
                          "` <OR> xDocAnnotation <substring> `" + q[0].ToString().ToUpper() + q.Substring(1).ToLower() +
                          "` <OR> xDocCaption <substring> `" + q.ToLower() +
                          "` <OR> xDocCaption <substring> `" + q[0].ToString().ToUpper() + q.Substring(1).ToLower() +
                          "` <OR> xDocKeyWords <substring> `" + q.ToLower() +
                          "` <OR> xDocKeyWords <substring> `" + q[0].ToString().ToUpper() + q.Substring(1).ToLower() +
                          "` <OR> xDocAuthorsTPU_FIO <substring> `" + q.ToLower() +
                          "` <OR> xDocAuthorsTPU_FIO <substring> `" + q[0].ToString().ToUpper() + q.Substring(1).ToLower() +
                          "`";
            }
            /* Отправляем запрос к сервису Oracle UCM */
            AdvancedSearchResult searchResult = searchService.AdvancedSearch(request, "dCreateDate", "DESC", resultCount, true, extraProps);

            /* Обрабатываем ошибки при помощи исключений */
            if (searchResult == null)
            {
                throw new Exception("Ваш запрос не был обработан сервером. Попробуйте позже");
            }
            if (searchResult.StatusInfo.statusCode < 0)
            {
                throw new Exception(searchResult.StatusInfo.statusMessage);
            }
            if (searchResult.SearchInfo.totalRows.Equals(0) || (searchResult.SearchResults.Count() == 0))
            {
                throw new Exception("По запросу \"" + q + "\" ничего не найдено. Попробуйте использовать другие ключевые слова.");
            }

            CountResults = searchResult.SearchResults.Count();
            List <Document> documentsList = new List <Document>(CountResults);
            int             countRec      = CountRecords;

            if (CountResults < countRec)
            {
                countRec = CountResults;
            }
            for (int i = 0; i < countRec; i++)
            {
                documentsList.Add(new Document(searchResult.SearchResults[i]));
            }

            results = documentsList.AsQueryable();
        }
예제 #3
0
        public void SearchByLetter(String q, bool inTitle)
        {
            String request;
            String sortField;
            int    resultCount = 200; // Количество выдаваемых результатов

            /* Формируем строку запросу к Oracle UCM */
            if (string.IsNullOrWhiteSpace(q))
            {
                q = "А";
            }
            if (inTitle)
            {
                request = "dDocTitle <starts> `" + q.ToUpper() +
                          "` <OR> dDocTitle <starts> `" + q.ToLower() +
                          "`";
                if (q.Equals("Е"))
                {
                    request += " <OR> dDocTitle <starts> `Ё`";
                }
                sortField = "dDocTitle";
            }
            else
            {
                request = "xDocAuthorsTPU_FIO <starts> `" + q.ToUpper() +
                          "` <OR> xDocAuthorsTPU_FIO <starts> `" + q.ToLower() +
                          "` <OR> xDocCoAuthors <starts> `" + q.ToUpper() +
                          "` <OR> xDocCoAuthors <starts> `" + q.ToLower() +
                          "`";
                sortField = "xDocAuthorsTPU_FIO";
            }

            /* Отправляем запрос к сервису Oracle UCM */
            AdvancedSearchResult searchResult = searchService.AdvancedSearch(request, sortField, "ASC", resultCount, true, extraProps);

            /* Обрабатываем ошибки при помощи исключений */
            if (searchResult == null)
            {
                throw new Exception("Ваш запрос не был обработан сервером. Попробуйте позже");
            }
            if (searchResult.StatusInfo.statusCode < 0)
            {
                throw new Exception(searchResult.StatusInfo.statusMessage);
            }
            if (searchResult.SearchInfo.totalRows.Equals(0) || (searchResult.SearchResults.Count() == 0))
            {
                throw new Exception("По запросу \"" + q + "\" ничего не найдено. Попробуйте использовать другие ключевые слова.");
            }

            CountResults = searchResult.SearchResults.Count();
            List <Document> documentsList = new List <Document>(CountResults);
            int             countRec      = CountRecords;

            if (CountResults < countRec)
            {
                countRec = CountResults;
            }
            for (int i = 0; i < countRec; i++)
            {
                documentsList.Add(new Document(searchResult.SearchResults[i]));
            }

            results = documentsList.AsQueryable();
        }
예제 #4
0
 public AdvancedSearchResult Search(string keyword, Category category, AdvancedSearchOptions advancedSearch)
 {
     return(AdvancedSearchResult.Search(keyword, category, advancedSearch));
 }