Sphinx过滤基于使用OR的类别

时间:2014-03-19 05:42:50

标签: sphinx

我使用Sphinx搜索以下文本字段:标题,描述,关键字。

但是,有时候使用类别会缩小范围。我们有3个类别字段:CatID1,CatID2和CatID3。

因此,例如,我需要查看“小猫”这个词是否在标题,描述或关键字中,但我也想过滤以便只有具有类别的项目(动物 - 身份证号码8)或(宠物 - 身份证号码9)或(猫科动物 - 类别ID号码10)在任何一个CatID字段中。

澄清一下,只显示CatID1,2或3中有8,9或10的物品。

关于如何使用sphinx过滤或将CatID1字段作为关键字进行搜索来实现此目的的任何想法?

注意:我能够过滤并且仅使用一个类别才能很好地工作,即:

 if(!empty($cat_str)) {


        $cl->SetFilter( 'catid1', array( $cat_str ));


        }

谢谢!

克雷格

1 个答案:

答案 0 :(得分:1)

SetFilter采用数组。在您的示例中,您将$cat_str放入数组中。一个项目的数组。

所以你只需要构建包含所有id的数组。

$cl->SetFilter( 'catid', array( $cat1, $cat2, $cat3 ));

但那不是很灵活。所以你可能是动态构建数组,而不是像那样硬编码。但这取决于您的应用程序如何构建阵列。

但是,以三种sperate属性存储id会使搜索变得困难。请注意,在上面的示例中,只注意到了一个名为catid的属性。这将是一个单值多值属性,其中包含来自所有三个cat字段的ID。这样很容易一次在任何列中搜索id。

http://sphinxsearch.com/docs/current.html#mva

如果使用sql源,可以使用

之类的东西
sql_query = SELECT id, title ... , CONCAT_WS(',', CatID1, CatID2 and CatID3) as catid FROM ... 
sql_attr_multi = uint catid from field;