Solr:如何连接子查询?

gorkyyrv  于 2022-11-05  发布在  Solr
关注(0)|答案(1)|浏览(250)

我已经找到了关于joins的文档和关于subqueries的文档,但是我不知道如何将它们结合起来。
我想通过id(这是一个传入的变量)来搜索某个内容。结果将是sectionpath。然后我想找到所有以sectionpath * 开头 * 的文档。我可以在一个查询中完成这一操作吗?
以下是我目前所做的尝试:

sectionpath:_query_:"{!fl=sectionpath}id:<variable>"*

我知道这行不通,但这是它的目的:如果sectionpath是以id为<variable>的文档的sectionpath开头(这就是 * 的含义),那么给出结果。我知道这远远不可行,但我不知道如何接近我的意图。
我也试过这样的方法:

{!join from=sectionpath to=sectionpath}_query_:"{!fl=sectionfullpath}id:<variable>"

但这似乎回归到了一切,它似乎不受sectionpath的限制。

5rgfhyps

5rgfhyps1#

有多个阶段来实现预期的结果,但简而言之;是,可以在单个查询中使用字段的值。
我们将使用[subquery] * 转换器,然后使用{!prefix} * 查询解析器。此外,我们将使用字段值作为子查询的输入。
首先,查询要在子查询中使用其值的文档:

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值 * 以 * main records '开头的文档。基本上,我们希望构造类似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

相关问题