Solr:我如何加入子查询?

时间:2015-02-10 23:19:36

标签: solr

我找到了joins的文档和subqueries的文档,但我不确定如何将它们合并。

我想通过id搜索某些内容(这是传入的变量)。该结果将为sectionpath。然后,我想要找到以<{1}}开始的所有文档。我可以在一个查询中执行此操作吗?

这是我到目前为止所尝试的内容:

sectionpath

我知道这不起作用,但这是这样的意图:给我sectionpath:_query_:"{!fl=sectionpath}id:<variable>"* 开头的结果(这就是*的含义)具有id的文档的sectionpath sectionpath。我知道这远非奏效,但我不确定如何接近我的意图。

我也尝试过这样的事情:

<variable>

但这似乎正在接近一切。它似乎不受sectionpath的限制。

1 个答案:

答案 0 :(得分:0)

有多个阶段可以达到期望的结果,但总之;是的,可以在单个查询中使用字段的值。

我们将使用[subquery] *转换器,然后使用{!prefix} *查询解析器。另外,我们将在子查询中使用field value as input

首先,查询将在子查询中使用其值的文档:

q=id:123

或者如果您仅使用id来过滤主要文档,则可以使用过滤查询;

q=*:*
fq=id:123

指定子查询,然后选择要检索的主要文档字段:

fl=id,section_path,childpaths:[subquery]

还使用主文档字段(在原始查询参数中)为子查询提供查询:

childpaths.q={!term f=section_path v=$row.section_path}

在这里,我们使用!term查询解析器来指示我们要搜索的字段。同样,通过使用v,我们引用了一个名为$row的自动变量来获取主文档及其section_path的值。

请记住,这将像section_path:xyz那样构造查询,但是我们想获取其section_path主记录开头的文档。基本上,我们想构造一个像section_path:xy*这样的查询。幸运的是,我们有一个!prefix查询解析器。因此,将childpaths.q更改为;

childpaths.q={!prefix f=name_en v=$row.name_en}

指定要检索的子文档字段(也在原始查询参数中):

childpaths.fl=id,section_path

您也可以像这样将子文档限制为仅获取 5 行;

childpaths.rows=5

您还可以修改其他查询参数,就像常规查询一样。

解雇请求,瞧!

这是完整的查询:

q=*:*&fq=id:123&fl=id,section_path,childpaths:[subquery]&childpaths.q={!prefix f=name_en v=$row.name_en}&childpaths.fl=id,section_path