【问题标题】:Intersect/merge results from several Sphinx indices来自多个 Sphinx 索引的相交/合并结果
【发布时间】:2025-12-13 07:30:01
【问题描述】:

早安,

我想知道是否有可能实现以下。例如,我们有 2 个索引:

1:标识、A、B、C、f1、f2。 2:身份证,f3。

在哪里: fn - rt_field。 A、B、C - 要返回的属性。 第二个索引中的 id 是第一个索引中的 id 的子集。

目标是查询两个索引并以以下形式获取结果:“Id、A、B、C”(!),这将包括来自两个索引的匹配项,但没有重复。

所以,重点是用属性 A、B、C 填充第二个索引的结果,这些属性来自第一个索引中具有相同 id 的相应文档。可以在Sphinx层上做吗?

如果不是,那么另一个问题。例如,我们有 2 个索引:

1:标识、A、B、C、f1、f2。 2:Id,A,B,C,f3。

在哪里: fn - rt_field。 A、B、C - 要返回的属性。 第二个索引中的 id 是第一个索引中的 id 的子集。

我们可以查询两个索引并以这种形式获取结果:“Id, A, B, C” (!),这将包括来自两个索引的匹配但没有重复?

据我所知,我们可以查询多个索引,最后一个索引的结果将覆盖以前索引中具有相同 id 的结果,但是如果索引具有不同的结构,它会起作用吗?

【问题讨论】:

    标签: .net full-text-search search-engine sphinx


    【解决方案1】:

    您可以做的(如果您必须这样做,并且如果您在表 1 和表 2 之间没有关系)您可以将查询构建为您正在查找的内容的一个合并数据集for,然后从中构建一个索引。

    换句话说,你可以这样做:

    给定 1:Id、A、B、C、f1、f2。 2:身份证,f3。

    SELECT Id, A, B, C, f1, f2, null AS "f3"
    FROM 1
    UNION
    SELECT Id, null AS "A", null AS "B", null AS "C", null AS "f1", null AS "f2", f3
    

    然后在您的 sphinx conf 文件中将您的 sql_query 设置为该查询。

    【讨论】:

    • 我在这里说的不是将数据导入索引,而是通过不同方案搜索 2 个索引。
    • 是的,我知道。这是您可能实现的一种方式。您可以使用它来搜索一个合并的“导入”索引,该索引将包含您需要的两个独立索引的数据。