C# SolrNet中记录debugQuery响应的干净方法

C# SolrNet中记录debugQuery响应的干净方法,c#,.net,solr,solrnet,C#,.net,Solr,Solrnet,我们添加了一个属性,允许我们在从应用程序查询Solr时添加debugQuery=true作为选项。有时查询可能很复杂,因此我们需要了解查询的哪些部分需要时间。但是,如果不使用isolConnection.get()并手动构建查询(以及获取原始XML),我就无法找到从Solr获得响应的好方法。今天,我们这样做: var solr = ServiceLocator.Current.GetInstance<ISolrOperations<SolrDocument>>(); va

我们添加了一个属性,允许我们在从应用程序查询Solr时添加
debugQuery=true
作为选项。有时查询可能很复杂,因此我们需要了解查询的哪些部分需要时间。但是,如果不使用
isolConnection.get()
并手动构建查询(以及获取原始XML),我就无法找到从Solr获得响应的好方法。今天,我们这样做:

var solr = ServiceLocator.Current.GetInstance<ISolrOperations<SolrDocument>>();
var qo = new QueryOptions();
        qo.AddFilterQueries(AuthorizationIncludeQuery(solrQueryParameter.AccessibleDocuments));
        qo.AddFilterQueries(new SolrQuery("person_id:" + solrQueryParameter.PersonId));
        qo.Start = solrQueryParameter.Start;
        qo.Rows = solrQueryParameter.Rows;
        qo.Fields = new[] { "*", "score" };


if (Constants.SolrDebugEnabled)
{
      var debugParams = new List<KeyValuePair<string, string>> { new KeyValuePair<string, string>("debugQuery", "true") };
      qo.ExtraParams = debugParams;
}
try
{
   return solr.Query(searchQuery, qo);
}
var solr=ServiceLocator.Current.GetInstance();
var qo=新查询选项();
qo.AddFilterQueries(授权包括查询(solrQueryParameter.AccessibledDocuments));
qo.AddFilterQueries(新的SolrQuery(“person_id:+solrQueryParameter.PersonId));
qo.Start=solrQueryParameter.Start;
qo.Rows=solrQueryParameter.Rows;
qo.Fields=new[]{“*”,“score”};
如果(常量.SolrDebugEnabled)
{
var debugParams=new List{new KeyValuePair(“debugQuery”,“true”)};
qo.ExtraParams=调试参数;
}
尝试
{
返回solr.Query(searchQuery,qo);
}

由于我们使用了
isoroperties
并返回
SolrQueryResults
,因此额外的参数在这个过程中会“丢失”。有没有办法不需要太多重写就能读出额外的参数

快速查看上的
SolrQueryExecuter

给了我答案。我基本上在代码中实现了
Execute
方法:

private static SolrQueryResults<SolrConsistencyCheckDocument> FindAllDocumentsWithDebugEnabled(string searchQuery, QueryOptions qo)
{
        var directConnection = ServiceLocator.Current.GetInstance<ISolrConnection>();
        var queryResult = new SolrQueryResults<SolrConsistencyCheckDocument>();
        var debugParams = new List<KeyValuePair<string, string>> { new KeyValuePair<string, string>("debugQuery", "true") };
        qo.ExtraParams = debugParams;
        var parser = ServiceLocator.Current.GetInstance<ISolrAbstractResponseParser<SolrConsistencyCheckDocument>>();
        var solrQueryTest = new SolrQueryExecuter<SolrConsistencyCheckDocument>(
            parser,
            directConnection,
            ServiceLocator.Current.GetInstance<ISolrQuerySerializer>(),
            ServiceLocator.Current.GetInstance<ISolrFacetQuerySerializer>(),
            ServiceLocator.Current.GetInstance<ISolrMoreLikeThisHandlerQueryResultsParser<SolrConsistencyCheckDocument>>());
        var parameters = solrQueryTest.GetAllParameters(new SolrQuery(searchQuery), qo);
        var resultq = directConnection.Get(solrQueryTest.Handler, parameters);
        var responseXML = XDocument.Parse(resultq);
        LogDebugElement(responseXML);
        parser.Parse(responseXML, queryResult);
        return queryResult;
    }
private static SolrQueryResults findalldocuments已启用调试(字符串搜索查询、查询选项qo)
{
var directConnection=ServiceLocator.Current.GetInstance();
var queryResult=新的SolrQueryResults();
var debugParams=new List{new KeyValuePair(“debugQuery”,“true”)};
qo.ExtraParams=调试参数;
var parser=ServiceLocator.Current.GetInstance();
var solrQueryTest=新的SolrQueryExecuter(
解析器,
直接连接,
ServiceLocator.Current.GetInstance(),
ServiceLocator.Current.GetInstance(),
ServiceLocator.Current.GetInstance());
var parameters=solrQueryTest.GetAllParameters(新的SolrQuery(searchQuery),qo);
var resultq=directConnection.Get(solrQueryTest.Handler,参数);
var responseXML=XDocument.Parse(resultq);
LogDebugElement(responseXML);
parser.Parse(responseXML,queryResult);
返回查询结果;
}