2017-12-14 13 views
1

Solr에 이벤트 항목을 쿼리하는 검색 방법이 있습니다. 날짜 만 전달하지 않은 이벤트 (예 : Where (x => x.EventDate.Date> = DateTime.Now.Date) 만 가져 오도록 수정해야합니다. 그러나이를 추가하는 방법을 모르겠습니다. SOLR 매우 익숙하지 해요 여기 내 검색 기능은 다음과 같습니다.C# Solr 쿼리 - 미래 날짜 만 얻는 방법?

public SearchQueryResults Search(string keywords, int page,int perPage, List<Guid> contentTypeFilters, List<Guid> otherFilters, ISortBuilder<SearchResultItem> sortBuilder) 
{ 
    var searchFilters = new List<IPredicateBuilder<SearchResultItem>>() 
        { 
         new IsSearchablePredicateBuilder() 
        }; 

    if (contentTypeFilters.Any()) 
    { 
    var contentTypePredicateBuilder = new ContentTypePredicateBuilder(); 

    contentTypePredicateBuilder.ContentTypes = contentTypeFilters; 

    searchFilters.Add(contentTypePredicateBuilder); 
    } 

    if (otherFilters.Any()) 
    { 
    var tagFilterBuilder = new TagsAndPredicateBuilder(otherFilters,_sitecoreContext); 

    searchFilters.Add(tagFilterBuilder); 
    } 

    if (string.IsNullOrWhiteSpace(keywords)) 
    { 
    keywords = ""; 
    } 

    SearchRequest searchRequest = new SearchRequest(); 
    var queryParams = new Dictionary<string, string>() { }; 
    queryParams.Add("q", keywords); 


    searchRequest.QueryParameters = queryParams; 
    searchRequest.SortBy = ""; 
    searchRequest.SortOrder = ""; 

    SearchQuery<SearchResultItem> queryArguments = new SearchQuery<SearchResultItem>(); 
    queryArguments.FilterBuilders = searchFilters; 

    queryArguments.Page = page; 
    queryArguments.PerPage = perPage; 
    queryArguments.FacetsBuilder = new SearchFacetBuilder<SearchResultItem>(); 
    queryArguments.SearchRequest = searchRequest; 
    queryArguments.IndexName = _indexName; 
    if (string.IsNullOrWhiteSpace(keywords)) 
    { 
    queryArguments.QueryBuilders =new List<IPredicateBuilder<SearchResultItem>>(); 
    } 
    else 
    { 
    queryArguments.QueryBuilders = new[] { new KeywordPredicateBuilder<SearchResultItem>(new[] { keywords }) }; 
    } 

    queryArguments.SortBuilder = sortBuilder; 

    try 
    { 
    var results = _searchManager.GetResults<SearchResultItem>(queryArguments); 


    SearchQueryResults queryResults = new SearchQueryResults(); 
    queryResults.ResultItems = results.Results; 
    queryResults.CurrentPage = page; 

    queryResults.TotalResults = Int32.Parse(results.TotalResults.ToString()); 

    queryResults.TotalPages = (queryResults.TotalResults + perPage - 1)/perPage; ; 


    return queryResults; 
    } 
    catch (Exception exc) 
    { 
    Sitecore.Diagnostics.Log.Error("Error with FilteredSearch, could be a loss of connection to the SOLR server: " + exc.Message, this); 
    return null; 
    } 
} 

여기가 호출되고 어떻게입니다 :이 항목 만 반환하도록

Results = _searchService.Search(searchTerm, CurrentPage - 1, 10, contentTypes, searchFilters, 
    new GenericSortBuilder<SearchResultItem>(q => q.OrderByDescending(r => r.SearchDate))); 

가 어떻게 날짜 필터링에 추가 할 경우 날짜 은 미래에 무엇입니까?

답변

0

날짜 필드를 필터링하는 기존 필터 목록에 필터 쿼리를 추가합니다. 전자 문서 페이지, 나는이 코드는 몇 가지 실수를 가질 수있는, C#을 개발자가 아닌,하지만 난이 주요 아이디어가 필요 분명한 생각 여기

Query.Field("date").From(DateTime.Now) 

을 도울 수있는, fluent API에 대한 정보를 찾을 수 있었다 끝내라.