C# 使用Lucene排序搜索结果时遇到问题

C# 使用Lucene排序搜索结果时遇到问题,c#,lucene,dynamics-crm-2011,lucene.net,adxstudio-portals,C#,Lucene,Dynamics Crm 2011,Lucene.net,Adxstudio Portals,我正在运行搜索查询,如下所示,以便从Dynamics CRM获得结果。搜索工作正常,但它会根据相关性产生结果。我们想按“createdon”字段的降序排列。因为我们每页只显示10个结果,所以我无法对该查询返回的结果进行排序 是否有基于字段的订购方式 public IEnumerable<SearchResult> Search(string term, int? pageNumber, int pageSize, out int totalHits, IEnumer

我正在运行搜索查询,如下所示,以便从Dynamics CRM获得结果。搜索工作正常,但它会根据相关性产生结果。我们想按“createdon”字段的降序排列。因为我们每页只显示10个结果,所以我无法对该查询返回的结果进行排序

是否有基于字段的订购方式

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);
    }
}
公共IEnumerable搜索(字符串项,int?页码,int
pageSize、out int totalHits、IEnumerable logicalName)
{
var searchProvider=SearchManager.Provider;
var query=new CrmEntityQuery(term,pageNumber.GetValueOrDefault(1),pageSize,logicalNames);
返回GetSearchResults(OutTotalHits、searchProvider、query);
}
private IEnumerable GetSearchResults(out int totalHits,
SearchProvider SearchProvider,CrmEntityQuery查询)
{
使用(ICrmEntityIndexSearcher searcher=searchProvider.GetIndexSearcher())
{                
StoreRequestItem(“SearchDeduplicateListForAuthorization”,新列表());
var results=searcher.Search(查询);
totalHits=结果。近似totalHits;
在结果中从x返回
选择新的搜索结果(x);
}
}

我本人没有使用Lucene,因此无法对此发表评论

但是,如果您在基本CRM中执行此操作。您可以将
QueryExpression
OrderExpression
一起使用。然后,当你翻页结果时,它们会按顺序被翻页

下面是一个带有
OrderExpression
和分页的
QueryExpression
示例


大概在某个时候,数据正在从CRM中取出,或者在Lucene中,或者在您自己的代码中,可能在
CrmEntityQuery
?然后您可以在那里添加排序。

谢谢。实际上,我正在搜索多个查询,如(kbArticle、网页、事件等)。所以,如果我使用QueryExpression,我认为这将是非常昂贵的查询。那么Lucene如何从CRM检索数据呢?可能是通过web服务调用——在这种情况下,它将具有相同的性能问题。也许它直接指向SQL?在这种情况下,可以对SQL查询应用订单。鉴于Lucene是一个搜索引擎库,如果它不支持结果排序,我会感到惊讶。现在还不清楚真正的问题在哪里。不,我认为Lucene不支持订购。SearchesHow Lucene是如何获得然后搜索的数据的?ADX Portal的SearchProvider正在使用Lucene,我无法确认他们是如何在下面查询的,但他们必须使用CRM Web服务。搜索提供程序可以索引使用名为“门户搜索”的视图自定义的任何实体。