在我正在研究的项目中,我们使用SolrNet与Solr进行交互。我们在solr中有一个自定义搜索组件,通过向查询添加join=true
来激活。 (我通过ExtraParams
的{{1}}在solrnet中执行此操作。
在响应中,在我要解析的正常结果之后有一个自定义CommonQueryOptions
,并返回给调用者。
现在我不知道在哪里可以在SolrNet管道中干净地插入自定义ResponseParser。
到目前为止我做了什么:
<lst name="joinresult">
类来保存我的自定义结果JoinResult<T>
JoinQueryResults<T> : SolrQueryResult<T>
属性。IList<JoinResult<T>> JoinResult
界面IJoinResponseParser<T> : ISolrResponseParser<T>
以将自定义列表结果解析为JoinResponseParser<T> : IJoinResponseParser<T>
属性。下一步是将所有这些类插入正确的位置,并使用JoinQueryResults.JoinResult
完成其余的繁重工作。但是这将始终返回SolrQueryResult,而不是我的自定义结果。
有人知道我需要什么来支持我的情景吗?
编辑:
到目前为止,我得到的是:
SolrQueryExecuter<T>.Execute
导出并添加SolrQueryExecuter<T>
方法,该方法返回ExecuteJoin(q,options)
。这有效,但它并不真正感觉'正确'。我的Execute方法是正常Execute方法的副本,只有一个基本变化:我将JoinQueryResults<T>
替换为new SolrQueryResults
。
阅读SolrNet代码我找不到任何其他'简单'的方法,所以我现在一直保持这种方法。
答案 0 :(得分:1)
我不确定SolrNet库是否支持在不修改源的情况下插入自定义响应解析器。
但是,我建议检查SolrNet on GitHub的源代码,并查看如何从SolrQueryResponse中解析Faceting或Highlighting结果。根据其中一个示例,您应该能够修改源以处理您创建的JoinQueryResults。理想情况下,您可以将此贡献回项目,以便其他人也可以从中受益。