我对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>类
基本上,我需要过滤器来加权,而不是去除不匹配的行。
谢谢
答案 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");
(这也使用仲裁语法来模拟任何查询)