Sphinx搜索 - 可选过滤器

时间:2013-09-03 02:15:26

标签: php sphinx

我对sphinx搜索很新,我的查询存在一些问题。

我有以下配置:

sql_attr_uint = user
sql_attr_uint = category
sql_field_string = title
sql_field_string = description

查询类似于

$sf->setMatchMode(SPH_MATCH_ANY);
$sf->setFilter("user", array("1033"));
$sf->setFilter("category", array("9"));
$sf->setFieldWeights(array("user"=>150,"category"=>50,"title"=>75,"description"=>75));

$result = $sf->query('my test query',"test");

我想查询与任何过滤器匹配的所有行,并按照优先级用户>匹配的过滤器数量对它们进行排序。 title = description>类

基本上,我需要过滤器来加权,而不是去除不匹配的行。

谢谢

1 个答案:

答案 0 :(得分:1)

  

基本上,我需要过滤器来加权,而不是去除不匹配的行。

虽然基本上可能,但它有困难。

更好的方法是将uint属性转换为全文关键字,

将sql_attr_uint更改为sql_field_string,因此成为字段(假设您要将它们保留为属性,如果不是仅删除该行并将它们默认为字段)

然后可以使用扩展语法

进行过滤
$cl->setMatchMode(SPH_MATCH_EXTENDED);
$cl->Query('"my test query"/1 | (@user 1099) | (@category 9)',"test");

(这也使用仲裁语法来模拟任何查询)