1

我对狮身人面像搜索很陌生,我的查询有一些问题。

我有以下配置:

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");

我想查询与任何过滤器匹配的所有行,并按它们匹配的过滤器数量对它们进行排序,优先级用户 > 标题 = 描述 > 类别

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

谢谢

4

1 回答 1

1

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

虽然基本上是可能的,但它充满了困难。

更好的只是将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 查询)

于 2013-09-03T10:44:35.170 回答