与 Sphinx 的错误匹配结果

Wrong matching results with Sphinx

Mysql 在 sphinx 配置中查询:

SELECT
    c.id,
    c.name,
    p.vendor
FROM
    categories AS c
LEFT JOIN (
    SELECT DISTINCT
        vendor,
        category_id
    FROM
        clothes
) p ON c.id = p.category_id
ORDER BY
    c.name

查询给出了这样的结构(让我称这个结果A):

id  name    vendor
178 dress   Liu Jo Jeans
178 dress   Bergamoda
178 dress   Rifle
190 dress   Moda Corazon
190 dress   Bergamoda
205 boots   Bergamoda

Sphinx 匹配模式为 SPH_MATCH_ANY。 当我尝试制作 Query('dress') 时,问题就开始了,结果是

178 dress   Liu Jo Jeans
190 dress   Moda Corazon

但我需要 namevendor 字段包含 'dress' 的所有结果(预期 结果 A 没有靴子)。

我做错了什么?提前致谢!

更新达尼洛·布斯托斯
类别结构:id (integer,auto increment), name (varchar,255), parent_id (integer).
衣服结构:id (integer,auto increment), name (varchar,255), vendor (varchar,255)

预期结果:

id  name    vendor
178 dress   Liu Jo Jeans
178 dress   Bergamoda
178 dress   Rifle
190 dress   Moda Corazon
190 dress   Bergamoda

您的主要问题之一是 'document-id' 在 sphinx 中应该是唯一的。您似乎在使用 category_id。然而,结果 A 中有多行具有相同的 ID。这导致在 Sphinx 中出现 unpredictable 结果。

一般来说,您应该使用衣服的 id 作为 document-id。所以可以获得多行,因为它应该是唯一的。如果仍然希望结果集包含它,您可以将 category_id 放在 sphinx 属性中。

(可能需要更改您的 'inner' 查询以获取连接 table 中的 ID,使用 GROUP BY 而不是 DISTINCT 进行重复数据删除。虽然可能甚至不需要它,只是一个标准两个 table 之间的 JOIN 可以)