【问题标题】:Custom request handlers in SolrSolr 中的自定义请求处理程序
【发布时间】:2014-04-03 11:55:53
【问题描述】:

我是 SolrCloud 的新手 在学习模式下..我想获得多个搜索查询的交集。 我们可以把它看成是多个结果集的内连接。据我所知,这可以通过 - 1) 数据源对之间的多个连接查询。我们甚至可以使用子查询。 2)我正在考虑的更好的选择是编写自定义请求处理程序。此请求处理程序将对每个数据源进行搜索查询并找到它们之间的交集。格式化响应并将其作为最终结果集返回。 我想知道在 Solr 中解决它的最佳方法是什么。我不确定如何在自定义请求处理程序中进行多个搜索查询。 谢谢

【问题讨论】:

  • 您能否具体说明“多个查询的交集”是什么意思?因为我可以很容易地假设您在查询中只需要 AND 运算符。或者您是否需要对不同的核心执行不同的查询?只需举一个您要运行的查询的示例。
  • @Emad 例如,我们有 3 个不同的数据源 DS1、DS2、DS3 DS1- {(cust_id1, a1, b1),(cust_id2, a2, b2),(cust_id3, a3, b3)} DS2- {(cust_id1, c1, d1),(cust_id3, c2, d2), (cust_id4, c3, d4)} DS3- {(cust_id1, e1, f1),(cust_id3, e2, f2)} DS4- {(cust_id1, g1, h1),(cust_id2, g2, h2),(cust_id3, g3, h3),(cust_id4, g4, h4)} ` output-所有 4 个数据源中的通用 cust_id {(cust1, a1, b1), (cust_id1, c1, d1), (cust_id1, e1, f1), (cust_id1, g1, h1), (cust_id3, a3, b3), (cust_id3, c2, d2), (cust_id3, e2, f2),(cust_id3, g3, h3)} 在 SQL 中,例如 DS1 的 INNER JOIN, cust_id 上的 DS2、DS3、DS4。
  • @Emad 我在想一个请求处理程序,它将使 solr 搜索所有 4 个数据源的 qeuery,获取 4 个结果集,然后在所有 4 个结果集中找到共同的 cust_id。格式化输出并返回给最终用户。我们可以在 requestHandler 中做这样的事情吗?我找不到任何显示在请求处理程序中发出 solr 搜索查询请求并处理它们的示例。

标签: solr solrj solrcloud


【解决方案1】:

我将在此处发布答案,因为这可能与我在使用 Solr 结果分组/字段折叠之前处理的案例非常相似

https://wiki.apache.org/solr/FieldCollapsing

在这种情况下我会做的是:

  • 使用单核。这个不需要多核。

  • 为来自每个数据源的每个不同文档生成新的唯一 ID

  • 使用您已有的 ID 作为“组 ID”(因此我们可以知道来自不同数据源的同一文档基本上是同一组)。在这种情况下,这将是 cust_id1、cust_id2 等。

  • 可能会添加另一个字段来指定数据源名称。

在查询中,我会通过说 group=true&group.field=GroupId 来使用分组功能

因此,这将尝试按“组 ID”对结果进行分组,并且默认情况下每组获取一个文档。 (默认为一个)但您可以将 group.limit 更改为另一个数字。

【讨论】:

    猜你喜欢
    • 2022-09-28
    • 2012-04-30
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多