与 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
但我需要 name
或 vendor
字段包含 '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 可以)
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
但我需要 name
或 vendor
字段包含 '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 可以)