2015-06-26 2 views
1

Я запускаю поисковый запрос следующим образом, чтобы привести результаты от Dynamics CRM. Поиск работает отлично, но он объединяет результаты, основанные на релевантности. Мы хотим упорядочить их в порядке убывания поля «createdon». Поскольку мы показываем только 10 результатов на страницу, поэтому я не могу сортировать результат, возвращаемый этим запросом.Имея проблемы при заказе результатов поиска с использованием Lucene

Можно ли заказать заказ на основе поля?

public IEnumerable<SearchResult> Search(string term, int? pageNumber, int 
     pageSize, out int totalHits, IEnumerable<string> logicalName) 
{ 
    var searchProvider = SearchManager.Provider; 
    var query = new CrmEntityQuery(term, pageNumber.GetValueOrDefault(1), pageSize, logicalNames); 

    return GetSearchResults(out totalHits, searchProvider, query);   
} 

private IEnumerable<SearchResult> GetSearchResults(out int totalHits, 
       SearchProvider searchProvider, CrmEntityQuery query) 
{ 
    using (ICrmEntityIndexSearcher searcher = searchProvider.GetIndexSearcher()) 
    {     
     Portal.StoreRequestItem("SearchDeduplicateListForAuthorisation", new List<Guid>()); 
     var results = searcher.Search(query); 
     totalHits = results.ApproximateTotalHits; 

     return from x in results 
      select new SearchResult(x); 
    } 
} 

ответ

1

Не используется Lucene самостоятельно, поэтому прокомментируйте это.

Однако, если вы делали это в основном CRM. Вы должны использовать QueryExpression с OrderExpression. Затем, когда вы показываете результаты, их выставляют по порядку.

Пример: QueryExpression, с OrderExpression и пейджингом.

Page large result sets with QueryExpression

Предположительно в какой-то момент данные тянет из CRM, либо в Lucene, или свой собственный код, может быть, в CrmEntityQuery? Тогда вы можете добавить сортировку туда.

+0

спасибо. На самом деле я ищу несколько запросов, например (kbArticle, веб-страницы, инциденты и т. Д.). Поэтому, если я использую QueryExpression, это будет очень дорогостоящий запрос. – Scorpion

+0

Ну, как Lucene извлекает данные из CRM? Предположительно, либо через вызов веб-службы, и в этом случае он будет иметь одинаковую производительность. Может быть, это напрямую связано с SQL? В этом случае вы заказываете запрос SQL. Учитывая, что Lucene является библиотекой поисковых систем, я был бы удивлен, если бы она не поддерживала упорядочение результатов. Неясно, где находится настоящая проблема. –

+0

Нет, я не думаю, что Lucene поддерживает заказы. https://lucene.apache.org/core/2_9_4/queryparsersyntax.html#Fuzzy Searches – Scorpion