狮身人面像搜索:从索引A结果中排除索引B结果

时间:2011-10-07 22:23:07

标签: sphinx

这是我的问题:

我有2个索引:

A - 仅限产品 B - 产品标题和产品说明

默认情况下,我搜索索引A以对产品进行分类(例如,大多数自行车在标题中都有“自行车”)。 有时会出现确定类别(可能是某些类别的子类别)的实例,我们需要查看描述,主要是为了排除不相关的结果。为了使搜索结果页面上的分页起作用,我需要在运行RunQueries()之后将此结果作为一个数组得到。

但它不起作用。它基本上添加了两个查询的结果,看起来没有办法减去结果。有人有什么想法吗?

1 个答案:

答案 0 :(得分:0)

告诉我,如果我完全遗漏了某些内容,但听起来我觉得你试图在产品标题中包含与某个查询匹配的结果,并将结果排除在与其他查询匹配的描述之外?

如果是这种情况,在我看来,拥有2个索引是没用的,并且您可以拥有一个包含产品标题和描述的索引,然后运行全文搜索查询:

@title queryA @description -queryB

您只需删除 - 符号即可使用相同的查询来搜索具有queryA标题和queryB描述的匹配。

如果这是偏离基础的话,我能想到的另一种方法是使用SphinxQL(我对任何库都不熟悉,因为对不使用SphinxQL的所有库的支持正在逐步淘汰就我所读到的未来而言)

使用SphinxQL,您可以运行2个查询,一个类似

SELECT id FROM indexB WHERE MATCH('@description queryB')

然后使用您从第一个查询中获得的ID列表运行第二个查询

SELECT id FROM indexA WHERE id NOT IN(id1,id2,id3,...)