コード例 #1
0
        internal static bool TryParse(string uriString, out LuceneQuery viewQuery)
        {
            Uri uri;

            viewQuery = null;
            return(Uri.TryCreate(uriString, UriKind.Relative, out uri) && TryParse(uri, out viewQuery));
        }
コード例 #2
0
        public async Task <IActionResult> Content(
            string indexName,
            string query,
            string parameters)
        {
            if (!await _authorizationService.AuthorizeAsync(User, Permissions.QueryLuceneApi))
            {
                return(Unauthorized());
            }

            var luceneQuery = new LuceneQuery
            {
                Index              = indexName,
                Template           = query,
                ReturnContentItems = true
            };

            var queryParameters = parameters != null?
                                  JsonConvert.DeserializeObject <Dictionary <string, object> >(parameters)
                                      : new Dictionary <string, object>();

            var result = await _luceneQuerySource.ExecuteQueryAsync(luceneQuery, queryParameters);

            return(new ObjectResult(result));
        }
コード例 #3
0
        internal static bool TryParse(Uri uri, out LuceneQuery viewQuery)
        {
            if (uri.IsAbsoluteUri)
            {
                viewQuery = null;
                return(false);
            }

            var match = Regex.Match(
                uri.ToString(), "^_design/(?<designDocName>.*?)/(?<indexName>.*?)(?:\\?(?<queryString>.*))?$");

            if (match.Success)
            {
                viewQuery = new LuceneQuery {
                    DesignDocumentName = match.Groups["designDocName"].Value,
                    IndexName          = match.Groups["indexName"].Value
                };

                var queryStringGroup = match.Groups["queryString"];
                if (queryStringGroup.Success)
                {
                    OptionListSerializer.Parse(queryStringGroup.Value, ref viewQuery);
                }

                return(true);
            }
            viewQuery = null;
            return(false);
        }
コード例 #4
0
        internal static string ToUriString(LuceneQuery viewQuery, ISerializer serializer = null)
        {
            if (viewQuery.DesignDocumentName.HasNoValue() || viewQuery.IndexName.HasNoValue())
            {
                return(null);
            }

            if (serializer == null)
            {
                serializer = new NewtonsoftSerializer();
            }

            var uri = new StringBuilder();

            uri.Append("_design/")
            .Append(viewQuery.DesignDocumentName)
            .Append("/")
            .Append(viewQuery.IndexName);

            var queryString = OptionListSerializer.ToQueryString(viewQuery, serializer);

            if (queryString.Length > 0)
            {
                uri.Append("?").Append(queryString);
            }

            return(uri.ToString());
        }
コード例 #5
0
ファイル: DbUriConstructor.cs プロジェクト: artikh/CouchDude
        public Uri GetQueryUri(LuceneQuery query)
        {
            var sectionFtiBaseUri  = new Uri(databaseFtiEndpoint, query.SectionName + "/");
            var databaseFtiBaseUri = new Uri(sectionFtiBaseUri, databaseNameWithSlash);

            return(new Uri(databaseFtiBaseUri, query.ToUri()));
        }
コード例 #6
0
 /// <constructor />
 public LuceneQueryResult(
     LuceneQuery query, IEnumerable <LuceneResultRow> rows,
     int count, int?totalCount, int?offset, TimeSpan fetchDuration, TimeSpan searchDuration, int limit, int skip)
     : base(rows, count, totalCount, offset)
 {
     Init(query, fetchDuration, searchDuration, limit, skip);
 }
コード例 #7
0
        public void LuceneController_Search_Double_FuzzyQuery()
        {
            // Arrange
            string[] docs =
            {
                "home",
                "homez", // note home and homes could be returned by PorterFilter
                "fuzzy",
                "wuzzy",
            };

            string[] keywords =
            {
                "wuzza",
                "homy",
            };

            this.AddLinesAsSearchDocs(docs);

            // Act
            var finalQuery = new BooleanQuery();

            foreach (var keyword in keywords)
            {
                finalQuery.Add(new FuzzyQuery(new Term(Constants.ContentTag, keyword)), Occur.SHOULD);
            }

            var luceneQuery = new LuceneQuery {
                Query = finalQuery
            };
            var previews = this.luceneController.Search(this.CreateSearchContext(luceneQuery));

            // Assert
            Assert.AreEqual(3, previews.Results.Count());
        }
コード例 #8
0
        /// <summary>Loads view request result from provided <see cref="TextReader"/>.</summary>
        public static ILuceneQueryResult Parse(TextReader textReader, LuceneQuery query)
        {
            var response = ParseRawResponse(textReader);
            var totalRows = GetTotalRows(response);
            var offset = GetOffset(response);
            var rawRows = GetRawRows(response);
            var fetchDuration = TimeSpan.FromMilliseconds(response.GetPrimitiveProperty<int>("fetch_duration"));
            var searchDuration = TimeSpan.FromMilliseconds(response.GetPrimitiveProperty<int>("search_duration"));
            var limit = response.GetPrimitiveProperty<int>("limit");
            var skip = response.GetPrimitiveProperty<int>("skip");

            var rows = (
                from rawRow in rawRows
                let id = rawRow.GetPrimitiveProperty<string>("id")
                let fields = rawRow.TryGetValue("fields")
                let score = rawRow.GetPrimitiveProperty<decimal>("score")
                let documentJsonObject = rawRow.TryGetValue("doc") as JsonObject
                let document = documentJsonObject == null ? null : new Document(documentJsonObject)
                select new LuceneResultRow(id, fields, score, id, document)
            ).ToArray();
            try
            {
                return new LuceneQueryResult(
                    query, rows, rows.Length, totalRows, offset, fetchDuration, searchDuration, limit, skip);
            } catch (ArgumentOutOfRangeException e)
            {
                throw  new ParseException(e);
            }
        }
コード例 #9
0
 public void ThrowLuceneIndexNotFoundExceptionIfNedded(LuceneQuery query)
 {
     if (statusCode == HttpStatusCode.NotFound && reason == Missing)
     {
         throw new LuceneIndexNotFoundException(query);
     }
 }
コード例 #10
0
        public void ShouldNotThrowAtAnyInput(string input)
        {
            LuceneQuery viewQuery = null;

            Assert.DoesNotThrow(() => { viewQuery = ConvertFromString(input); });
            Assert.Null(viewQuery);
        }
コード例 #11
0
        private void button2_Click(object sender, EventArgs e)
        {
            //FSDirectory dir = FSDirectory.Open(PublicConst.LucenePath);
            //IndexSearcher searcher = new IndexSearcher(dir);//查找器
            //{
            //    TermQuery query = new TermQuery(new Term("Name", "配件"));//包含
            //    TopDocs docs = searcher.Search(query, null, 1000);//找到的数据
            //    foreach (ScoreDoc sd in docs.ScoreDocs)
            //    {
            //        Document doc = searcher.Doc(sd.Doc);
            //        Console.WriteLine("***************************************");
            //        Console.WriteLine(string.Format("Id={0}", doc.Get("Id")));
            //        Console.WriteLine(string.Format("Code={0}", doc.Get("Code")));
            //        Console.WriteLine(string.Format("PCode={0}", doc.Get("PCode")));
            //        Console.WriteLine(string.Format("Name={0}", doc.Get("Name")));
            //        Console.WriteLine(string.Format("Levels={0}", doc.Get("Levels")));
            //    }
            //    Console.WriteLine("一共命中了{0}个", docs.TotalHits);
            //}

            ILuceneQuery query = new LuceneQuery();
            var          list  = query.QueryIndex("手机");

            foreach (var item in list)
            {
                Console.WriteLine($"Title{item.Title} Price{item.Price}  ProductId{item.ProductId} CateId{item.CateId} ");
            }
        }
コード例 #12
0
        /// <summary>Loads view request result from provided <see cref="TextReader"/>.</summary>
        public static ILuceneQueryResult Parse(TextReader textReader, LuceneQuery query)
        {
            var response       = ParseRawResponse(textReader);
            var totalRows      = GetTotalRows(response);
            var offset         = GetOffset(response);
            var rawRows        = GetRawRows(response);
            var fetchDuration  = TimeSpan.FromMilliseconds(response.GetPrimitiveProperty <int>("fetch_duration"));
            var searchDuration = TimeSpan.FromMilliseconds(response.GetPrimitiveProperty <int>("search_duration"));
            var limit          = response.GetPrimitiveProperty <int>("limit");
            var skip           = response.GetPrimitiveProperty <int>("skip");

            var rows = (
                from rawRow in rawRows
                let id = rawRow.GetPrimitiveProperty <string>("id")
                         let fields = rawRow.TryGetValue("fields")
                                      let score = rawRow.GetPrimitiveProperty <decimal>("score")
                                                  let documentJsonObject = rawRow.TryGetValue("doc") as JsonObject
                                                                           let document = documentJsonObject == null ? null : new Document(documentJsonObject)
                                                                                          select new LuceneResultRow(id, fields, score, id, document)
                ).ToArray();

            try
            {
                return(new LuceneQueryResult(
                           query, rows, rows.Length, totalRows, offset, fetchDuration, searchDuration, limit, skip));
            } catch (ArgumentOutOfRangeException e)
            {
                throw  new ParseException(e);
            }
        }
コード例 #13
0
 public Task <ILuceneQueryResult> QueryLucene(LuceneQuery query)
 {
     return(Task.Factory.StartNew(() =>
     {
         Thread.Sleep(50);                     //preventing returning already done task
         return Mock.Of <ILuceneQueryResult>(r => r.Count == 0 && r.Rows == new LuceneResultRow[0]);
     }));
 }
コード例 #14
0
 private void Init(LuceneQuery query, TimeSpan fetchDuration, TimeSpan searchDuration, int limit, int skip)
 {
     Query          = query;
     FetchDuration  = fetchDuration;
     SearchDuration = searchDuration;
     Limit          = limit;
     Skip           = skip;
 }
コード例 #15
0
        public Task <ILuceneQueryResult> QueryLucene(LuceneQuery query)
        {
            if (query == null)
            {
                throw new ArgumentNullException("query");
            }

            using (SyncContext.SwitchToDefault())
                return(QueryLuceneInternal(query));
        }
コード例 #16
0
        async Task <ILuceneQueryResult <T> > QueryLuceneInternal <T>(LuceneQuery query, bool isEntityType)
        {
            var rawQueryResult = await databaseApi.QueryLucene(query);

            if (!isEntityType)
            {
                return(rawQueryResult.OfType(DeserializeViewData <T, LuceneResultRow>));
            }

            UpdateUnitOfWork(rawQueryResult.Rows);
            return(rawQueryResult.OfType(GetEntities <T, LuceneResultRow>));
        }
コード例 #17
0
        async Task <ILuceneQueryResult> QueryLuceneInternal(LuceneQuery query)
        {
            var response = await StartQuery(uriConstructor.GetQueryUri(query));

            if (!response.IsSuccessStatusCode)
            {
                var error = new CouchError(parent.Settings.Serializer, response);
                error.ThrowDatabaseMissingExceptionIfNedded(uriConstructor);
                error.ThrowLuceneIndexNotFoundExceptionIfNedded(query);
                error.ThrowCouchCommunicationException();
            }
            using (var reader = await response.Content.ReadAsUtf8TextReaderAsync())
                return(LuceneQueryResultParser.Parse(reader, query));
        }
コード例 #18
0
        /// <summary>
        /// Gets the extended results.
        /// </summary>
        /// <typeparam name="TSource">The type of the source.</typeparam>
        /// <param name="source">The source.</param>
        /// <returns></returns>
        public static ExtendedSearchResults <TSource> GetExtendedResults <TSource>(this IQueryable <TSource> source) where TSource : SearchResultItem
        {
            Assert.ArgumentNotNull(source, "source");
            var genQueryable = source.Provider as ExtendedGenericQueryable <TSource, LuceneQuery>;

            Assert.IsNotNull(genQueryable, "Can't get queryable...");
            var               executeIndex = genQueryable.ExecuteIndex as LuceneIndex <TSource>;
            Analyzer          analyzer     = executeIndex.Parameters.Analyzer;
            IExecutionContext exContext    = null;//Throws exception Sitecore 8 update 2. Pass null so field context is used to resolve Analyzer later: executeIndex.Parameters.ExecutionContext;
            LuceneQuery       luceneQuery  = null;

            SearchResults <TSource> results = genQueryable.Execute <SearchResults <TSource> >(Expression.Call(null, (getResultsMethod).MakeGenericMethod(new Type[] { typeof(TSource) }), new Expression[] { source.Expression }), out luceneQuery);

            return(new ExtendedSearchResults <TSource>(results, luceneQuery.Query, analyzer, exContext));
        }
コード例 #19
0
        private static string ConvertToString(LuceneQuery viewQuery, bool setDefaultDesignDocumentAndView = true)
        {
            if (setDefaultDesignDocumentAndView)
            {
                viewQuery.DesignDocumentName = "dd";
                viewQuery.IndexName          = "someIndex";
            }

            var converter = TypeDescriptor.GetConverter(typeof(LuceneQuery));

            if (converter != null)
            {
                return((string)converter.ConvertTo(viewQuery, typeof(string)));
            }
            return(null);
        }
コード例 #20
0
        /// <inheritdoc/>
        public Task <ILuceneQueryResult <T> > QueryLucene <T>(LuceneQuery query)
        {
            if (query == null)
            {
                throw new ArgumentNullException("query");
            }
            var isEntityType = IsEntityType <T>();

            if (isEntityType && !query.IncludeDocs)
            {
                throw CreateShouldUseIncludeDocsException();
            }
            WaitForFlushIfInProgress();

            using (SyncContext.SwitchToDefault())
                return(QueryLuceneInternal <T>(query, isEntityType));
        }
コード例 #21
0
        private Task <Queries.IQueryResults> LuceneQueryApiAsync(LuceneQueryModel queryModel, bool returnContentItems = false)
        {
            var luceneQuery = new LuceneQuery
            {
                Index              = queryModel.IndexName,
                Template           = queryModel.Query,
                ReturnContentItems = returnContentItems
            };

            var queryParameters = queryModel.Parameters != null?
                                  JsonConvert.DeserializeObject <Dictionary <string, object> >(queryModel.Parameters)
                                      : new Dictionary <string, object>();

            var result = _luceneQuerySource.ExecuteQueryAsync(luceneQuery, queryParameters);

            return(result);
        }
コード例 #22
0
        /// <summary>
        /// 用lucene进行商品查询
        /// </summary>
        /// <param name="keyword"></param>
        /// <param name="categoryIdList"></param>
        /// <returns></returns>
        public static List <Commodity> QueryCommodity(string keyword)
        {
            try
            {
                if (string.IsNullOrWhiteSpace(keyword))
                {
                    return(null);
                }
                ILuceneQuery luceneQuery = new LuceneQuery();
                string       queryString = string.IsNullOrWhiteSpace(keyword) ? "" : string.Format(" +{0}", AnalyzerKeyword(keyword));

                return(luceneQuery.QueryIndex(queryString));
            }
            catch (Exception ex)
            {
                logger.Error(string.Format("QueryCommodity参数为{0}出现异常", keyword), ex);
                return(null);
            }
        }
コード例 #23
0
        public void LuceneController_Search_Request_For_PagIndex2_PageSize1_Returns_2nd_Record_Only()
        {
            //Arrange
            AddStandardDocs();

            var query = new LuceneQuery
            {
                Query = new TermQuery(new Term(Constants.ContentTag, "quick")), PageIndex = 2, PageSize = 1
            };

            var hits = _luceneController.Search(CreateSearchContext(query));

            //Assert
            Assert.AreEqual(3, hits.TotalHits);
            Assert.AreEqual(1, hits.Results.Count());
            // for some reason, this search's docs have scoring as
            // Line1=0.3125, Line1=0.3125, Line2=0.3125, Line2=0.3750
            Assert.AreEqual(Line1, hits.Results.ElementAt(0).Document.GetField(Constants.ContentTag).StringValue);
        }
コード例 #24
0
ファイル: Program.cs プロジェクト: hfendou/WebMVCSite
        static void Main(string[] args)
        {
            do
            {
                Console.WriteLine("======================================================");
                Console.WriteLine("分词列名:");
                string fieldName = Console.ReadLine();
                Console.WriteLine("查询的词:");
                string keyword = Console.ReadLine();
                Console.WriteLine();

                CommodityRepository repository = new CommodityRepository();
                //IList<EntryDataModel<Commodity>> entryDataModelList = repository.GetEntryDataModelList();
                //IndexBuilderThread.BuildIndexThread<Commodity>(entryDataModelList);

                ILuceneQuery <Commodity> luceneQuery = new LuceneQuery <Commodity>();
                List <Commodity>         modelList   = luceneQuery.QueryIndex(keyword, fieldName, repository.GetFieldModelList());
                ShowDataList(modelList);
            } while (true);
        }
コード例 #25
0
        public void LuceneController_Search_Single_FuzzyQuery()
        {
            // Arrange
            string[] docs =
            {
                "fuzzy",
                "wuzzy",
            };
            const string keyword = "wuzza";

            this.AddLinesAsSearchDocs(docs);

            // Act
            var luceneQuery = new LuceneQuery {
                Query = new FuzzyQuery(new Term(Constants.ContentTag, keyword))
            };
            var previews = this.luceneController.Search(this.CreateSearchContext(luceneQuery));

            // Assert
            Assert.AreEqual(2, previews.Results.Count());
        }
コード例 #26
0
ファイル: CommodityLucene.cs プロジェクト: delaywu/Lucene
        /// <summary>
        /// 用lucene进行商品查询
        /// </summary>
        /// <param name="pageIndex">从1开始</param>
        /// <param name="pageSize">单页数量</param>
        /// <param name="totalCount">总数</param>
        /// <param name="keyword">搜索的关键字</param>
        /// <param name="categoryIdList">类别集合</param>
        /// <param name="priceFilter">[13,50]  13,50且包含13到50   {13,50}  13,50且不包含13到50</param>
        /// <param name="priceOrderBy">price desc   price asc</param>
        /// <returns></returns>
        public static List <Commodity> QueryCommodity(int pageIndex, int pageSize, out int totalCount, string keyword, List <int> categoryIdList, string priceFilter, string priceOrderBy)
        {
            totalCount = 0;
            try
            {
                if (string.IsNullOrWhiteSpace(keyword) && (categoryIdList == null || categoryIdList.Count == 0))
                {
                    return(null);
                }
                ILuceneQuery luceneQuery = new LuceneQuery();
                string       queryString = string.Format(" {0} {1}",
                                                         string.IsNullOrWhiteSpace(keyword) ? "" : string.Format(" +{0}", AnalyzerKeyword(keyword)),
                                                         categoryIdList == null || categoryIdList.Count == 0 ? "" : string.Format(" +{0}", AnalyzerCategory(categoryIdList)));

                return(luceneQuery.QueryIndexPage(queryString, pageIndex, pageSize, out totalCount, priceFilter, priceOrderBy));
            }
            catch (Exception ex)
            {
                logger.Error(string.Format("QueryCommodity参数为{0}出现异常", keyword), ex);
                return(null);
            }
        }
コード例 #27
0
        protected override NameValueCollection GetQueryString()
        {
            var queryString = base.GetQueryString();

            queryString["ignoreFilter"] = IgnoreFilter.ToString();
            queryString["CountOnly"]    = CountOnly.ToString();

            if (Skip.HasValue)
            {
                queryString["Skip"] = Skip.ToString();
            }

            if (Take.HasValue)
            {
                queryString["Take"] = Take.ToString();
            }

            if (IncludeSemVer2)
            {
                queryString["semVerLevel"] = "2.0.0";
            }

            if (!string.IsNullOrWhiteSpace(SortBy))
            {
                queryString["sortBy"] = SortBy;
            }

            if (LuceneQuery.HasValue)
            {
                queryString["luceneQuery"] = LuceneQuery.ToString();
            }

            if (PackageType != null)
            {
                queryString["packageType"] = PackageType;
            }

            return(queryString);
        }
コード例 #28
0
ファイル: ModelLucene.cs プロジェクト: hfendou/WebMVCSite
        /// <summary>
        /// 用lucene进行商品查询
        /// </summary>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <param name="totalCount"></param>
        /// <param name="keyword"></param>
        /// <param name="fieldName"></param>
        /// <param name="categoryIdList"></param>
        /// <param name="priceFilter">[13,50]  13,50且包含13到50   {13,50}  13,50且不包含13到50</param>
        /// <param name="priceOrderBy">price desc   price asc</param>
        /// <param name="fieldModelList"></param>
        /// <returns></returns>
        public static List <T> QueryCommodity <T>(int pageIndex, int pageSize, out int totalCount, string keyword, string fieldName, List <int> categoryIdList, Filter filter, Sort sort, IList <FieldDataModel> fieldModelList) where T : class, new()
        {
            totalCount = 0;
            List <T> modelList = null;

            try
            {
                if (string.IsNullOrWhiteSpace(keyword) && (categoryIdList == null || categoryIdList.Count == 0))
                {
                    return(null);
                }
                ILuceneQuery <T> luceneQuery     = new LuceneQuery <T>();
                string           analyzerKeyword = string.IsNullOrWhiteSpace(keyword) ? "" : string.Format(" +{0}", AnalyzerKeyword(keyword, fieldName));
                string           queryString     = string.Format(" {0} ", analyzerKeyword);
                modelList = luceneQuery.QueryIndexPage(queryString, fieldName, pageIndex, pageSize, out totalCount, filter, sort, fieldModelList);
            }
            catch (Exception ex)
            {
                m_logger.Error(string.Format("QueryCommodity参数为{0}出现异常", keyword), ex);
            }
            return(modelList);
        }
コード例 #29
0
        public void LuceneController_Search_Single_FuzzyQuery()
        {
            //Arrange
            string[] docs =
            {
                "fuzzy",
                "wuzzy"
            };
            const string keyword = "wuzza";

            AddLinesAsSearchDocs(docs);

            int totalHits;

            //Act
            var luceneQuery = new LuceneQuery {
                Query = new FuzzyQuery(new Term(Constants.ContentTag, keyword))
            };
            var previews = _luceneController.Search(luceneQuery, out totalHits);

            //Assert
            Assert.AreEqual(2, previews.Count());
        }
コード例 #30
0
        public async Task <IActionResult> Documents(
            string indexName,
            string query,
            string parameters)
        {
            if (!await _authorizationService.AuthorizeAsync(User, Permissions.QueryLuceneApi))
            {
                return(this.ChallengeOrForbid("Api"));
            }

            var luceneQuery = new LuceneQuery
            {
                Index    = indexName,
                Template = query
            };

            var queryParameters = parameters != null?
                                  JsonConvert.DeserializeObject <Dictionary <string, object> >(parameters)
                                      : new Dictionary <string, object>();

            var result = await _luceneQuerySource.ExecuteQueryAsync(luceneQuery, queryParameters);

            return(new ObjectResult(result.Items));
        }
コード例 #31
0
 public Task<ILuceneQueryResult> QueryLucene(LuceneQuery query)
 {
     return Task.Factory.StartNew(() =>
     {
         Thread.Sleep(50); //preventing returning already done task
         return Mock.Of<ILuceneQueryResult>(r => r.Count == 0 && r.Rows == new LuceneResultRow[0]);
     });
 }
コード例 #32
0
		internal static bool TryParse(Uri uri, out LuceneQuery viewQuery)
		{
			if (uri.IsAbsoluteUri)
			{
				viewQuery = null;
				return false;
			}

			var match = Regex.Match(
				uri.ToString(), "^_design/(?<designDocName>.*?)/(?<indexName>.*?)(?:\\?(?<queryString>.*))?$");
			if (match.Success)
			{
				viewQuery = new LuceneQuery {
					DesignDocumentName = match.Groups["designDocName"].Value,
					IndexName = match.Groups["indexName"].Value
				};

				var queryStringGroup = match.Groups["queryString"];
				if (queryStringGroup.Success)
					OptionListSerializer.Parse(queryStringGroup.Value, ref viewQuery);

				return true;
			}
			viewQuery = null;
			return false;
		}
コード例 #33
0
        private static string ConvertToString(LuceneQuery viewQuery, bool setDefaultDesignDocumentAndView = true)
        {
            if (setDefaultDesignDocumentAndView)
            {
                viewQuery.DesignDocumentName = "dd";
                viewQuery.IndexName = "someIndex";
            }

            var converter = TypeDescriptor.GetConverter(typeof(LuceneQuery));
            if (converter != null)
                return (string) converter.ConvertTo(viewQuery, typeof (string));
            return null;
        }
コード例 #34
0
		internal static Uri ToUri(LuceneQuery viewQuery, ISerializer serializer = null)
		{
			var uriString = ToUriString(viewQuery, serializer);
			return uriString == null? null: new Uri(uriString, UriKind.Relative);
		}
コード例 #35
0
		internal static string ToUriString(LuceneQuery viewQuery, ISerializer serializer = null)
		{
			if (viewQuery.DesignDocumentName.HasNoValue() || viewQuery.IndexName.HasNoValue())
				return null;

			if (serializer == null)
				serializer = new NewtonsoftSerializer();

			var uri = new StringBuilder();
			uri.Append("_design/")
				 .Append(viewQuery.DesignDocumentName)
				 .Append("/")
				 .Append(viewQuery.IndexName);

			var queryString = OptionListSerializer.ToQueryString(viewQuery, serializer);
			if (queryString.Length > 0)
				uri.Append("?").Append(queryString);

			return uri.ToString();
		}
コード例 #36
0
 public ILuceneQueryResult QueryLucene(LuceneQuery query)
 {
     return databaseApi.QueryLucene(query).WaitForResult();
 }
コード例 #37
0
ファイル: DatabaseApi.cs プロジェクト: artikh/CouchDude
		public Task<ILuceneQueryResult> QueryLucene(LuceneQuery query)
		{
			if (query == null) throw new ArgumentNullException("query");

			using (SyncContext.SwitchToDefault())
				return QueryLuceneInternal(query);
		}
コード例 #38
0
ファイル: DatabaseApi.cs プロジェクト: artikh/CouchDude
		async Task<ILuceneQueryResult> QueryLuceneInternal(LuceneQuery query)
		{
			var response = await StartQuery(uriConstructor.GetQueryUri(query));
			if (!response.IsSuccessStatusCode)
			{
				var error = new CouchError(parent.Settings.Serializer, response);
				error.ThrowDatabaseMissingExceptionIfNedded(uriConstructor);
				error.ThrowLuceneIndexNotFoundExceptionIfNedded(query);
				error.ThrowCouchCommunicationException();
			}
			using (var reader = await response.Content.ReadAsUtf8TextReaderAsync())
				return LuceneQueryResultParser.Parse(reader, query);
		}
コード例 #39
0
ファイル: DbUriConstructor.cs プロジェクト: artikh/CouchDude
 public Uri GetQueryUri(LuceneQuery query)
 {
     var sectionFtiBaseUri = new Uri(databaseFtiEndpoint, query.SectionName + "/");
     var databaseFtiBaseUri = new Uri(sectionFtiBaseUri, databaseNameWithSlash);
     return new Uri(databaseFtiBaseUri, query.ToUri());
 }
コード例 #40
0
		internal static bool TryParse(string uriString, out LuceneQuery viewQuery)
		{
			Uri uri;
			viewQuery = null;
			return Uri.TryCreate(uriString, UriKind.Relative, out uri) && TryParse(uri, out viewQuery);
		}
コード例 #41
0
 private LuceneSearchContext CreateSearchContext(LuceneQuery luceneQuery)
 {
     return(new LuceneSearchContext {
         LuceneQuery = luceneQuery, SearchQuery = this.mockSearchQuery.Object
     });
 }
コード例 #42
0
ファイル: CouchError.cs プロジェクト: artikh/CouchDude
 public void ThrowLuceneIndexNotFoundExceptionIfNedded(LuceneQuery query)
 {
     if (statusCode == HttpStatusCode.NotFound && reason == Missing)
         throw new LuceneIndexNotFoundException(query);
 }