【问题标题】:SolrNet: How to use a custom searchcomponent (and its result) from solrnetSolrNet:如何使用来自 solrnet 的自定义搜索组件(及其结果)
【发布时间】:2011-12-14 16:09:03
【问题描述】:

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

现在我不知道在 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> 派生并添加一个返回JoinQueryResults<T>ExecuteJoin(q,options) 方法。

这行得通,但感觉并不“正确”。我的 Execute 方法是普通 Execute 方法的副本,只有一个基本更改:我将 new SolrQueryResults 替换为 new JoinQueryResults

阅读 SolrNet 代码我找不到任何其他“简单”的方法,所以我暂时保留这种方法。

【问题讨论】:

    标签: solrnet


    【解决方案1】:

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

    但是,我建议查看SolrNet on GitHub 的源代码,并查看如何从 SolrQueryResponse 中解析出 Faceting 或 Highlighting 结果。基于这些示例之一,您应该能够修改源以处理您创建的 JoinQueryResults。然后,理想情况下,您可以将其回馈给项目,以便其他人也可以受益。

    【讨论】:

    • 嗨,保罗,阅读代码,我想我在 ExecuteSolrQueryExecuter 方法中被困在 var results = new SolrQueryResults<T>(); 线上。我希望能够新建我的派生 SolrQueryResults 类。
    • 我不认为你想创建一个派生的JoinQueryResults。您应该在 SolrQueryResults 类上创建一个属于 JoinResults 类型的属性,然后让 JoinResponseParser 类在 SolrQueryResults 中填充该属性。同样,我希望模仿 HighlightingResponseParser 的功能。
    • 向 SolrQueryResults 添加属性会起作用,但我宁愿不从源代码构建自己的自定义 solrnet 程序集。我真的更喜欢将我的 SolrNet 引用保持为标准引用,并在二进制分布之上构建我自己的行为。
    • @rjvdboon 没有好办法来做这台 ATM。另见groups.google.com/group/solrnet/browse_thread/thread/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多