2011-12-14 77 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