예제 #1
0
        public IActionResult SearchAddress(string address = "")
        {
            if (!string.IsNullOrEmpty(address))
            {
                var query = new SearchQuery
                {
                    Index = "fts_index",
                    Query = new MatchQuery(address)
                }
                .Limit(10);
                var             result    = bucket.Query(query);
                List <Landmark> landmarks = new List <Landmark>();

                ISearchQueryResult searchQueryRows = result;
                foreach (var item in searchQueryRows)
                {
                    var landmark = bucket.GetDocument <Landmark>(item.Id).Document.Content;

                    landmarks.Add(landmark);
                }

                return(View(landmarks));
            }
            else
            {
                List <Landmark> landmarks = new List <Landmark>();
                return(View(landmarks));
            }
        }
예제 #2
0
        public ISearchQueryResult Send(SearchQuery searchQuery)
        {
            ISearchQueryResult searchResult = null;

            if (_isDown)
            {
                searchResult = HandleNodeUnavailable(searchQuery.Query);
            }
            else
            {
                try
                {
                    searchResult = SearchClient.Query(searchQuery);
                }
                catch (Exception e)
                {
                    MarkDead();
                    searchResult = new SearchQueryResult
                    {
                        Exception = e,
                        Success   = false
                    };
                }
            }
            return(searchResult);
        }
예제 #3
0
 protected IActionResult CouchbaseError(ISearchQueryResult result)
 {
     return(StatusCode((int)HttpStatusCode.InternalServerError, new
     {
         message = ErrorMessage(result)
     }));
 }
        /// <summary>
        /// Throws a <see cref="CouchbaseSearchResponseException"/> on any error.
        /// </summary>
        /// <param name="result">The result.</param>
        public static void EnsureSuccess(this ISearchQueryResult result)
        {
            if (result == null)
            {
                throw new ArgumentNullException("result");
            }

            if (!result.Success)
            {
                throw CouchbaseSearchResponseException.FromResult(result);
            }
        }
예제 #5
0
        private string ErrorMessage(ISearchQueryResult result)
        {
            var errorMessages = new List <string>();

            if (!string.IsNullOrEmpty(result.Message))
            {
                errorMessages.Add($"Message: '{result.Message}'");
            }
            if (result.Errors != null && result.Errors.Any())
            {
                errorMessages.AddRange(result.Errors.Select(e => $"Error: {e}"));
            }
            if (result.Exception != null)
            {
                errorMessages.Add($"Exception: {result.Exception.Message}");
            }
            return(string.Join(", ", errorMessages));
        }
        public override async Task <ISearchQueryResult> SendWithRetryAsync(SearchQuery searchQuery)
        {
            ISearchQueryResult searchResult = null;

            try
            {
                if (!ConfigInfo.IsSearchCapable)
                {
                    throw new ServiceNotSupportedException
                              (ExceptionUtil.GetMessage(ExceptionUtil.ServiceNotSupportedMsg, "FTS"));
                }

                var     attempts = 0;
                IServer server;
                while ((server = ConfigInfo.GetSearchNode()) == null)
                {
                    if (attempts++ > 10)
                    {
                        throw new TimeoutException("Could not acquire a server.");
                    }
                    Thread.Sleep((int)Math.Pow(2, attempts));
                }

                searchResult = await server.SendAsync(searchQuery);
            }
            catch (Exception e)
            {
                Log.Info(e);
                searchResult = new SearchQueryResult
                {
                    Status    = SearchStatus.Failed,
                    Success   = false,
                    Exception = e
                };
            }
            return(searchResult);
        }
 /// <summary>
 /// Creates a new CouchbaseQueryResponseException.
 /// </summary>
 /// <param name="result">Result from Couchbase</param>
 internal static CouchbaseSearchResponseException FromResult(ISearchQueryResult result)
 {
     return(new CouchbaseSearchResponseException(
                ExceptionUtil.GetResponseExceptionMessage(result.Errors.FirstOrDefault(), result.Status),
                result.Status, result.Errors, result.Exception));
 }
예제 #8
0
 public SearchResult(ISearchQueryResult[] searchQueryQueryResults)
 {
     SearchQueryResults = searchQueryQueryResults;
     Tweets = searchQueryQueryResults.SelectMany(x => x.FilteredTweets);
     NumberOfQueriesUsedToCompleteTheSearch = searchQueryQueryResults.Length;
 }
예제 #9
0
        public void SearchResult_EnsureSuccess_Throws_ArguementNulException_When_Result_Is_Null()
        {
            ISearchQueryResult result = null;

            Assert.Throws <ArgumentNullException>(() => result.EnsureSuccess());
        }