我对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");
我想查询与任何过滤器匹配的所有行,并根据它们匹配的过滤器数量对它们进行排序,在优先级用户>标题=描述>类别上
Basicaly,我需要过滤器进行加权,而不是删除不匹配的行。
感谢
Basicaly,我需要过滤器进行加权,而不是删除不匹配的行。
虽然基本上是可能的,但困难重重。
更好的方法是将uint属性转换为全文关键字,
将sql_attr_uint更改为sql_field_string,使其成为字段(假设您也想将它们作为属性保留,如果不只是删除行并使它们默认为字段)
然后可以使用扩展语法进行过滤
$cl->setMatchMode(SPH_MATCH_EXTENDED);
$cl->Query('"my test query"/1 | (@user 1099) | (@category 9)',"test");
(这也是使用quorum语法来模拟ANY查询)