public override IList <ISearchResult> Search(string text, ILanguage source, ILanguage target, int maxResultsCount, SearchMode mode, bool targetRequired)
        {
            _entryModels.Clear();

            var results = _searchService.GetTerms(text, source, target, maxResultsCount);

            if (results != null)
            {
                var termGroups = SortSearchResultsByPriority(text, GetTermResultGroups(results), source);

                results = RemoveDuplicateTerms(termGroups, source, target);
                results = MaxSearchResults(results, maxResultsCount);
                CreateEntryTerms(results, source, GetLanguages());
            }

            if (IsActiveSegmentText(text, source))
            {
                OnTermEntriesChanged(new TermEntriesChangedEventArgs
                {
                    EntryModels    = _entryModels,
                    SourceLanguage = new Language(source.Locale.Name),
                    TargetLanguage = new Language(target.Locale.Name)
                });
            }

            return(results);
        }
        public override IList <ISearchResult> Search(string text, ILanguage source, ILanguage target, int maxResultsCount, SearchMode mode, bool targetRequired)
        {
            _entryModels.Clear();
            _logger.Info("--> Try searching for segment");

            var          bodyModel         = GetApiRequestBodyValues(source, target, text);
            var          modelString       = JsonConvert.SerializeObject(bodyModel);
            var          activeProjectName = Utils.GetCurrentProjectName();
            CacheService cacheService      = null;

            if (!string.IsNullOrEmpty(activeProjectName))
            {
                cacheService = new CacheService(activeProjectName);
            }

            if (cacheService != null)
            {
                _logger.Info("--> Try to get cache results");

                var cachedResults = Task.Run(async() => await cacheService.GetCachedResults(text, target.Name, modelString)).Result;
                if (cachedResults != null && cachedResults.Count > 0)
                {
                    CreateEntryTerms(cachedResults.ToList(), source, GetLanguages());
                    _logger.Info("--> Cache results found");

                    SubscribeToEntriesChangedEvent(text, source, target);
                    return(cachedResults);
                }
            }

            var results = _searchService.GetTerms(modelString);

            if (results != null)
            {
                var termGroups = SortSearchResultsByPriority(text, GetTermResultGroups(results), source);

                results = RemoveDuplicateTerms(termGroups, source, target);
                results = MaxSearchResults(results, maxResultsCount);
                CreateEntryTerms(results, source, GetLanguages());

                // add search to cache db
                var searchResults = new SearchCache
                {
                    QueryString        = modelString,
                    SourceText         = text,
                    TargetLanguageName = target.Name
                };

                if (cacheService != null)
                {
                    _logger.Info("--> Try to add results in db");

                    Task.Run(async() => await cacheService.AddSearchResults(searchResults, results));
                }
            }

            SubscribeToEntriesChangedEvent(text, source, target);

            return(results);
        }
Esempio n. 3
0
        public override IList <ISearchResult> Search(string text, ILanguage source, ILanguage target, int maxResultsCount, SearchMode mode, bool targetRequired)
        {
            ClearEntries();
            _logger.Info("--> Try searching for segment");

            var jsonBody    = GetApiRequestBodyValues(source, target, text);
            var queryString = JsonConvert.SerializeObject(jsonBody);
            var canConnect  = CacheProvider?.Connect(IATEApplication.ProjectsController?.CurrentProject);

            if (canConnect != null && (bool)canConnect)
            {
                _logger.Info("--> Try to get cache results");

                var cachedResults = CacheProvider.GetCachedResults(text, target.Locale.Name, queryString);
                if (cachedResults != null && cachedResults.Count > 0)
                {
                    CreateEntryTerms(cachedResults.ToList(), source, GetLanguages());

                    _logger.Info("--> Cache results found");
                    OnTermEntriesChanged(text, source, target);

                    return(cachedResults);
                }
            }

            var config  = IATEApplication.ProjectsController?.CurrentProject?.GetTermbaseConfiguration();
            var results = _searchService.GetTerms(queryString, config?.TermRecognitionOptions?.SearchDepth ?? 500);

            if (results != null)
            {
                var termGroups = SortSearchResultsByPriority(text, GetTermResultGroups(results), source);

                results = RemoveDuplicateTerms(termGroups, source, target);
                results = MaxSearchResults(results, maxResultsCount);
                CreateEntryTerms(results, source, GetLanguages());

                // add search to cache db
                var searchCache = new SearchCache
                {
                    SourceText     = text,
                    TargetLanguage = target.Locale.Name,
                    QueryString    = queryString
                };

                if (CacheProvider != null)
                {
                    _logger.Info("--> Try to add results in db");
                    CacheProvider.AddSearchResults(searchCache, results);
                }
            }

            OnTermEntriesChanged(text, source, target);

            return(results);
        }
Esempio n. 4
0
        public override IList <ISearchResult> Search(string text, ILanguage source, ILanguage destination, int maxResultsCount, SearchMode mode, bool targetRequired)
        {
            var searchService = new TermSearchService(_providerSettings);
            var textResults   = text.Split(' ').ToList();

            _termsResult.Clear();

            //search terms for each word in text (active segment)
            Parallel.ForEach(textResults, (textResult) =>
            {
                var termResults = searchService.GetTerms(textResult, source, destination, maxResultsCount);
                ((List <ISearchResult>)_termsResult).AddRange(termResults);
            });

            if (_termsResult.Count > 0)
            {
                CreateEntryTerms(source, destination);
            }
            return(_termsResult);
        }