2011-12-14 81 views
1

在我正在研究的项目中,我们使用SolrNet与Solr进行交互。我们在solr中有一个自定义搜索组件,通过在查询中添加join=true来激活。 (我在solrnet中通过CommonQueryOptionsExtraParams)。 在响应中有一个自定义<lst name="joinresult">后,我想解析,并返回给调用者的正常结果。SolrNet:如何使用solrnet中的自定义搜索组件(及其结果)

现在我不知道我可以在SolrNet管道中干净地插入自定义ResponseParser。

我有什么迄今所做的:

  • 创建一个JoinResult<T>类来保存我的自定义结果
  • 创建了一个带有IList<JoinResult<T>> JoinResult属性JoinQueryResults<T> : SolrQueryResult<T>
  • 创建一个IJoinResponseParser<T> : ISolrResponseParser<T>接口
  • 创建一个JoinResponseParser<T> : IJoinResponseParser<T>来解析自定义列表结果到JoinQueryResults.JoinResult属性。

下一步是将所有这些类插入正确的位置,并使用SolrQueryExecuter<T>.Execute来完成其余的繁重工作。但是,这将始终返回一个SolrQueryResult,而不是我的自定义结果。

有没有人知道我需要支持我的场景?

编辑:
我有什么到目前为止是这样的:从SolrQueryExecuter<T>

  • 派生并添加一个ExecuteJoin(q,options)方法返回一个JoinQueryResults<T>

这样做有效,但它并不真正感觉'正确'。我的执行方法是正常执行方法的副本,只有一个必要的更改:我用new JoinQueryResults替换了new SolrQueryResults

读取SolrNet代码我找不到任何其他'简单'的方法,所以我现在保持这种方法。

回答

1

我不确定SolrNet库是否支持在不修改源的情况下插入自定义响应解析器。

但是,我建议您检查SolrNet on GitHub的源代码,并查看Surfaceting或Highlighting结果是如何从SolrQueryResponse中解析出来的。根据其中一个示例,您应该能够修改源以处理您创建的JoinQueryResults。那么理想情况下,您可以将此回馈给该项目,以便其他人也可以从中受益。

+0

嗨,保罗,阅读代码,我认为我被困在``SolrQueryExecuter`的`Execute`方法``var results = new SolrQueryResults ();`行。我希望能够新增我的派生SolrQueryResults类。 – rjvdboon 2011-12-15 07:05:06